MySql必知必会
2022-02-10 16:24:50 0 举报
AI智能生成
MySql必知必会摘抄
作者其他创作
大纲/内容
且逻辑
使用and子句
或逻辑
使用OR子句
组合WHERE子句
该语句处理的逻辑是1003且>=10或任意的1002,出现了逻辑问题
括号的优先级很高
解决办法:使用括号正确地分组对应的操作符
计算次序
IN操作符用来指定条件范围(范围指的是左右两个等值)
使用长合法选项清单时IN更直观
使用IN时计算次序更容易管理
IN比OR操作符执行更快
IN可以包含其他SELECT语句,能够动态地建立WHERE语句
IN操作符的优点
IN操作符
WHERE 关键词后面的否定语句
排除不匹配的行
NOT操作符
7、数据过滤
所有出包含某个内容的所有内容
未知的值进行匹配
用来匹配值的一部分特殊字符
LIKE作为谓词时不是操作符
表示任意字符出现任意次数占位
可以位于模式的两端
百分号%通配符
MySQL搜索默认区分大小写
jet % 与JetPack 1000 不匹配
注意点
SELECT actor_id FROM sakila.actor WHERE first_name LIKE '%P%';
使用函数去掉首位空格
再使用一个占位符
如果保存的词前面或者后面有空格将可能会匹配不上,解决的方式有
占位符也可以位于位置的两端
SELECT actor_id FROM sakila.actor WHERE first_name LIKE 'P%E';
占位符也可以位于中间,两边表示确定的字符
占位符还可以匹配0个字符
NULL不能被占位符匹配
LIKE操作符(谓词)
SELECT first_name FROM sakila.actor WHERE first_name LIKE 'PENE_OPE';
占位单个字符串
下划线 _ 通配符
不要过度使用通配符
在确实需要使用通配符时,除非绝对有必要,否则不要把他们用在搜索模式的开始处,这样搜索起来是最慢的
仔细注意通配符的位置
使用通配符的技巧
8、使用通配符进行过滤
用于复杂条件的语句,WHERE语句会增加语句的复杂性,正则表达式表示的会简短,但是不容易看出逻辑
匹配文本、数字、重复的内容、链接等等
MYSQL子句对正则表达式提供了初步的支持
SELECT first_name FROM sakila.actor WHERE first_name REGEXP '.ENELOPE';
REGEXP
.代表正则表达式中的通配符
正则表达式可以在WHERE语句后面使用
LIKE扫描的是整个列,只能查询列值,但是可以通过%达到相同的效果
但是REGEXP也可以使用^与$定位符达到和like相同的效果
REGEXP可以匹配列中的的值
LIKE关键字与REGEXP的区别
基本字符匹配
使用 | 来作为或条件
搜索正则表达式中的串之一
进行OR匹配
使用[] 来匹配
括号中代表OR条件
SELECT prod_name FROM product_name REGEXP '1|2|3 TON' ORDER BY prod_name;
表达的为1或2或3 TON
该条件应用于『3 Ton』整个串(在字符后面也匹配)
字符集合也可以被否定,需要在集合开始加上^
[]与或符号不同的地方在于或表达式需要使用集合来限制条件
匹配几个字符之一
[0123456789]
简化成[0-9]
[a-z] 匹配任意字母
匹配范围
. 表示任意字符,但是如果需要在字符中寻找真正的. 则需要使用转义字符
\\\\. 表示查找.
\\\\_ 表示查找_
\\\\\\ 表示查找\\
匹配特殊字符
分支主题
使用预定义的字符集
匹配字符类
之前使用条件的时候只能匹配单次
多次匹配可以使用?匹配符
(
\\\\(
0-9内任意数组
[0-9]
s或无s
s?
SELECT prod_nameFROM productsWHERE prod_name REGEXP '\\\\([0-9] sticks?\\\\)'ORDER BY prod_name;
0-9任意数字
出现4次
'[[:digit:]]{4}'
匹配多个实例
使用^ 在集合中表示否定
在集合外表示串开始的位置
使用^与$ 可以用来表示和LIKE相同的作用
定位符
SELECT hello REGEXP '[0-9]';
这里返回0,因为hello中没有数字
返回的结果只有0和1
在没有数据表的情况下使用SELECT测试正则表达式
正则表达式的特殊用法
使用MySQL正则表达式
9、使用正则表达式进行搜索
既显示公司名又显示公司地址,但是不在同一个列中
有物品单价和数量,需要打印总价格
列数据是大小混合的,但是需要将所有数据大写表示出来
出现例子
SELECT语句内
只有SELECT语句知道哪些是计算字段,哪些是实际的表列
计算的位置
计算字段
打印name(location)
两个字段name,location
concat()函数拼接两个列
多数DMBS都是使用+或||拼接,MySQL使用的是concat函数来进行拼接
字段与字段之间或者自己添加的字符之间用逗号隔开
RTrim函数可以去除字段右边多余的空格
LTrim函数可以去除字段左边多余的空格
Trim函数可以去除字段两边多余的空格
Trim函数
给新的计算列(计算出来或者是拼接出来的)一个别名
AS操作符+alias
别名还可以将表中不符合规定的字符重新命名
使用别名
拼接字段
加减乘除
只支持四种普通的算数运算符
对检索出的数据进行算数计算
执行计算函数
10、创建计算字段
使用函数最好写上注释
处理文本串
用于在数值上进行算术操作
处理日期和事件值,并从这些值中提取特定成分
返回DBMS正使用的特殊信息
函数的作用
将文本转换成大写
Uper()
查询的时候考虑名字或者其他字符发音类似,如 lee和lei,发音相同时也能在数据库中搜索到这个数据
Soundex函数
SELECT语句后面
文本处理函数
不管是在WHERE中还是即将要保存的日期信息格式都必须为yyyy-mm-dd
当数据库中
MySQL的日期格式
日期和时间处理函数
函数
11、使用数据处理函数
一个以某种有组织的方式存储的数据集合
数据库是可以保存在硬盘上的文件,也可以不是
数据库软件(DBMS):数据库管理系统
什么是数据库
表是一种结构化的文件
在数据库中创建的文件
表的意义在于分类存储某种清单
用来描述表的这某组信息
模式(schema)
表
表由列组成
每个列都有相应的数据类型
数据类型还能正确地排序数据
列和数据类型
水平行为表行
一行也可以为数据库记录
行
主键(列)用来表示特定的一行
主键最好由自己来定义,如果没有主键的时候,数据库会自己设定隐藏主键
表中的每一行都应该有唯一标识自己的一列(主键)
任意两行都不具有相同的主键
每个行都必须具有一个主键值(主键列不允许NULL值)
满足主键的条件
可以有多个主键,但是多主键组合必须唯一
不更新
不重用
不更改
主键习惯
主键
Structured Query Language
数据库通信语言
什么是SQL
1、数据库基础
DataBase Manager service
DBMS
一种数据库软件
MySQL版本介绍
Microsoft Access
共享文件系统
MySQL
SQL server
客户机-服务器软件
DBMS分成两类
服务器软件为MYSQL DBMS
工具
脚本语言
Web应用开发语言
客户机软件可以是MYSQL提供的工具
什么是Mysql
-u指定用户名
-p密码
mysql -u -p
连接mysql
mysql --help 获取帮助
quit/exit 退出命令行
mysql命令行使用程序
MySQL管理器 是一个图形交互客户机
连接的服务器状态
Service Information
允许停止和启动MySQL以及指定服务器的特性
Service Control
用来定义MySQL用户、登录权限
User Administration
列出可以用的数据库并允许创建数据库和表
Catalogs
允许选择不同视图的图标
MYSQL Administrator(需要下载)
MySQL query Browser (需要下载)
客户机工具
MySQL工具
2、MySQL简介
-h
主机名
-P
端口
-u
合法的用户名
-p
用户口令
mysql -u root -h localhost -P 3306 -p123
连接
选择数据库
show databases;
显示所有数据库
SHOW TABLES;
● 字段名
● 数据类型
● 是否允许NULL
● 键信息
● 默认值以及其他信息
返回的是
显示数据库中的所有表
SHOW COLUMNS FROM host_summary;
表列的需要唯一值,需要在初始化的时候定义,MySQL会自动分配不重复的唯一值
自动增量
显示广泛的服务器信息
SHOW STATUES
显示创建特定数据库的MySQL语句
SHOW CREATE DATABASE
显示创建特定表的MySQL语句
SHOW CREATE TABLE
显示授权用户的安全权限
SHOW GRANTS
显示错误
SHOW ERRORS
显示报警信息
SHOW WARNINGS
SHOW支持的其他语句
显示表中的字段信息
了解数据库和表
3、使用MySQL
作用:检索信息
查什么
去哪里查
查询成功的条件
SELECT host FROM host-summary;
从一张表中检索出一个字段中的所有内容,也称检索单个列
这里查询的数据在没有人为排序的情况下在不同的环境中查询可能会不一致
检索单个列
SELECT 语句
sql语句需要以「;」分割
mysql可以不使用「;」结束
但是mysql提供的工具软件如命令行需要使用「;」来分割单条语句
sql语句不区分大小写,但是经常使用大写来表示sql关键字,方便调试
sql语句所有空格都会被忽略,多行sql语句会易于阅读
在SELECT关键字后面给出多个列名
列名后面跟上逗号,注意:最后一个列名不要逗号
检索多个列
最好不要使用通配符,会影响数据库的效率
使用通配符能检索出名字未知的列
检索所有列
SELECT返回所有匹配的行
DISTINCT来限制只返回不同的id
DISTINCT必须放在列名的前面
DISTINCT关键字应用于所有列而不仅是前置它的列
使用DISTINCT关键字来限制不检索出来的不同行
检索不同的行
SELECT prod_name FROM products LIMIT 5;
指定表中的每个行,为返回了第一行或前几行
一个限制条件
指定表中的开始限制行数,返回第几行的前几行
行数不够时,MySQL只能返它能返回的那么多行
这个语法容易混乱,MySQL5开始修改成了 SELECT SEGEMENT FROM TABLES LIMIT 4 OFFSET 3;
多个限制条件
SELECT product.prod_name FROM products
表名也可以使用完全限定的表名
SELECT product.prod_name FROM crashcourse.products;
表名也可以使用完全限定的列名
使用完全限定的列名和表名
限制结果
4、检索数据
SELECT语句返回某个数据的单个列没有特定的顺序
数据显示是按照底层的存储顺序显示的
数据插入之后进过更新和删除也会改变数据的排序
引言
SELECT first_name from sakila.actor ORDER BY first_name;
MySQL对first_name 列以字母顺序排序数据
如果要限制显示范围的话,limit语句需要写在最后
SELECT last_name from sakila.actor ORDER BY first_name;
可以选择非检索的列进行排序,实际意义上来说就是检索按照某一列,索引显示按照另一列:
排序
排序数据
首先按照条件1进行排序,其次按照条件2进行排序
指定列名、使用逗号隔开
按照多个列进行排序只有在第一个列中都相等的情况下才会寻找第二个条件,否则不会按照第二个条件进行排序。
按照多个列进行排序
变成降序排序
多个列降序需要在每个字段后面加上DESC关键字
DESC字段
数据库默认为升序排序
ASC字段
A与a相同吗,a位于B之后还是Z之后
在于数据库中的字典顺序
区分大小写和排序顺序
指定排序方向
5、排序检索数据
很少检索一个表中的所有数据,那么检索表中的范围数据就可以使用WHERE
注意,字符串需要加上引号
SQL语句允许做的事情不仅仅是相等测试
数据可以在应用层过滤,也可以在服务器端过滤数据
在应用层过滤数据就必须将所有数据全部传输到应用层,这样会导致网络带宽的浪费
数据过滤方法
OERDER BY语句应该位于WHERE字句之后
使用WHERE子句
等值条件
小于条件
大于条件
检查单个值(不区分大小写)
不是id为190所有的索引
不匹配检查
变量与字符串比较,字符串需要加引号
与数值列进行比较不用引号
BETWEEN .. AND ..
表示开始值和结束值
范围值检查
指定其中列是否可以不包含值
WHERE .. IS NULL
空值检查不是检查是否为0,而是检查是否为NULL
空值检查
WHERE字句操作符
6、过滤数据
MySql必知必会
收藏
收藏
0 条评论
回复 删除
下一页