MYSQL(笔记1)

<center>show相关语句

#显示当前可用数据库
SHOW DATABASES;
#显示当前数据库中的表
SHOW TABLES;
#显示当前表中的字段
SHOW COLUMNS FROM customers;
#显示服务器状态
SHOW STATUS;
#显示创建数据库或表的相关语句
SHOW CREATE DATABASE;
SHOW CREATE TABLE;
#显示用户的安全权限
SHOW GRANTS;
#显示当前服务器errors和warnings
SHOW ERRORS;
SHOW WARNINGS;

<center>检索数据

如果没有明确排序查询结果,输出的数据顺序和书上的可能不同,只要返回的数据行数相同就行

检索单个列

SELECT cust_name FROM customers;

检索多个列

SELECT cust_name, cust_city FROM customers;

检索所有列

SELECT * FROM customers;

检索某列,并排除重复项

SELECT DISTINCT vend_id FROM products;

使用limit限制显示哪些行

#limit第一行索引是0,不是1
SELECT cust_id FROM customers LIMIT 4 #显示前4行
SELECT cust_id FROM customers LIMIT 3,4 #从第3行开始的4行,不够就停止
SELECT cust_id FROM customers LIMIT 4 OFFSET 3 #同上

使用完全限定的表明、数据库名,这是为了后续某些场景准备的,防止混淆

SELECT products.prod_id FROM crashcourse.`products`

<center>排序检索数据</center>

order by排序,默认升序

SELECT prod_name FROM products ORDER BY prod_name;
SELECT prod_name FROM products ORDER BY prod_name ASC; #同上

多列检索,并排序

SELECT prod_id, prod_name, prod_name FROM products ORDER BY prod_id, prod_name;
#先按prod_id排序,若两个prod_id相同再按prod_name排序

指定排序方向

SELECT prod_id, prod_name, prod_name FROM products ORDER BY prod_id DESC, prod_name;
#只指定了prod_id为降序,prod_name还是默认升序

order by 和 limit结合,显示字段的最大、最小值

SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; #limit只显示1行

<center>过滤数据</center>

使用WHERE子句

SELECT prod_name, prod_price FROM products WHERE prod_price=2.5;
#where和order by同时存在时,where在前,否则将产生错误
#where子句操作符:=, <>, !=, <, <=, >, >=, between and

检查单个值

SELECT prod_name, prod_price FROM products WHERE prod_name='fuses';#不区分大小写
SELECT prod_name, prod_price FROM products WHERE prod_price<10;
SELECT prod_name, prod_price FROM products WHERE prod_price<=10;
#可以看到,有时使用引号,有时不使用。如果将值和串类型的列进行比较,需要限定引号,用来和数值比较的值不用加引号

不匹配检查

#检索不是由供应商1003制造的产品
SELECT vend_id, prod_name FROM products WHERE vend_id<>1003;

范围值检查

#BETWEEN AND检索价格在5到10之间的所有产品,数值包含开头和结尾
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

空值检查

#检索商品价格为空的产品信息
SELECT * FROM products WHERE prod_price IS NULL;#表中没有这样的数据,所以没有返回内容
#但是customers表中有这样的数据,检索消费者邮箱为空的消费者信息
SELECT * FROM customers WHERE cust_email IS NULL;

null和不匹配

在通过过滤选择出不具有特定值的行时,有可能希望返回具有null值得行,但这是行不通的,因为当值为null时,一般有时特殊含义,数据库不知道它们是否匹配,所以在匹配过滤或不匹配过滤的时候,不返回它们。

因此在过滤数据时,一定要验证返回数据中确实给出了被过滤列中具有null的行。

解释:


43931efa-b512-495b-8ba1-172022cabf9f.png

使用AND OR 组合WHERE子句

#检索供应商为1003生产的,且价格小于10的产品信息
SELECT * FROM products WHERE prod_price<10 AND vend_id=1003;
#检索供应商为1003生产的产品,或者价格小于10的产品,的信息
SELECT * FROM products WHERE prod_price<10 OR vend_id=1003;
#计算次序:多个and和or时,使用次序容易混乱,最好使用()强制标定计算顺序
#查询价格大于等于10,且由1002,1003制造的所有产品
SELECT * FROM products WHERE prod_price>=10 AND (vend_id=1002 OR vend_id=1003);

IN操作符

用来指定条件范围,功能与OR相同,优点是在多个条件下表达更简洁,执行速度更快;
更大的优点是可以包含其他SELECT语句

SELECT prod_name, prod_price FROM products WHERE (vend_id=1002 OR vend_id=1003) ORDER BY prod_name;
SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;#结果同上

NOT操作符

功能是否定后面跟的所有条件
NOT IN功能和AND相同

#列出除1002,1003之外的所有供应商制造的商品
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002,1003);
SELECT prod_name, prod_price, vend_id FROM products WHERE (vend_id<>1002 AND vend_id<>1003);

用通配符进行过滤

LIKE操作符

当需要搜索产品名中包含anvil的茶品信息时,前面的查询就不适用了,这个时候就需要使用通配符。通配符可以创建特定数据的搜索模式。

'%'通配符:表示任何字符出现任意次数,包括0次
SELECT prod_name FROM products WHERE prod_name LIKE 'jet%';#哪些产品名以jet开头
#通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符
SELECT prod_name FROM products WHERE prod_name LIKE '%anvil%';#哪些产品名包含anvil
#通配符也可以在搜索模式的中间使用
SELECT prod_name FROM products WHERE prod_name LIKE 's%e';#以s开头,e结尾的产品名

末尾空格会干扰通配符匹配。例如在保存次anvil时,后面多保存了一个空格,那么语句prod_name LIKE '%anvil'就会不匹配。解决这个问题的办法是,在搜索模式末尾再添加一个%。更好的办法是使用函数去掉末尾空格,后面会接触到。
'_'通配符

下划线的用途和%类似,但是只匹配一个字符,不能多也不能少

SELECT prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
SELECT prod_name FROM products WHERE prod_name LIKE '% ton anvil';

注意:
通配符很有用,但和其他过滤条件相比也更慢,没有必要不要使用;
通配符位于搜索模式开头是最慢的,除非绝对必要,不要用在开头;
注意通配符位置,如果错误,可能不会返回想要的数据;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容