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