学习笔记一
一些说明:
- 不区分大小写,但一般关键字大写,其他小写
- 分成多行更容易阅读
- 最后一句要写;
- 操作前选择数据库使用语句
USE crashcourse
四、SELECT语句
检索单个列
SELECT prod_name
FROM products;
检索多个列
SELECT prod_name, prod_price, vend_id
FROM products;
检索所有列
SELECT *
FROM products;
通配符(*)的优点是可以返回不知名字的列,但一般不要使用,会降低检索性能
检索有不同值的行
SELECT DISTINCT vend_id
FROM products;
SELECT DISTINCT vend_id
告诉MySQL只返回不同的vend_id
行
限制结果
SELECT prod_name
FROM products
LIMIT 5;
返回的值不多于5行
LIMIT 5,5;
返回从第5行开始的5行,注意这里第一行为0,1为第二行
LIMIT 5 OFFSET 3;
从行3开始取5行
完全限定
SELECT products.prod_name
FROM crashcourse.products;
五、排序检索
排序数据
SELECT prod_name
FROM products
ORDER BY prod_name;
默认为正序排列,倒序排列如下
ORDER BY prod_name DESC;
按多个列排序
SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price, prod_name;
仅在prod_price
相同时才按照prod_name
排序
SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price DESC, prod_name;
默认A与a相同,但数据库管理员可以改变默认排序方式
使用ORDER BY
和LIMIT
语句可以找到最大或最小值
SELECT prod_price
FROM products
ORDER BY prod_price DESC
LIMIT 1;
输出为价格最大数值
六&七、WHERE语句过滤数据
匹配检查
SELECT prod_name, prod_price
FROM products
WHERE prod_price=2.50;
ORDER BY
语句要位于WHERE
语句之后
SELECT prod_name, prod_price
FROM products
WHERE prod_price=2.50
ORDER BY prod_price DESC;
检测单个值
WHERE prod_name='fuses';
不匹配检查
WHERE prod_price<>10.0;
两种写法,输出价格不等于10.0的
WHERE prod_price !=10.0;
范围值检查
SELECT prod_name, prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
空值检查
SELECT prod_name
FROM products
WHERE prod_price IS NULL;
组合WHERE语句
AND操作符
SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id=1003 AND prod_price<=10;
此SQL语句检索由供应商1003制造且价格小于等于10美元的所
有产品的名称和价格
OR操作符
SELECT prod_name, prod_price
FROM products
WHERE vend_id =1002 OR vend_id=1003;
计算次序问题
SELECT prod_name, prod_price
FROM products
WHERE vend_id =1002 OR vend_id=1003 AND prod_price>=10;
如果需要列出价格为10美元(含)以上且由1002或1003制
造的所有产品。上述语句是错误的,因为AND
的优先级大于OR
,它理解为由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品,而不管其价格如何。 正确输入如下:
WHERE (vend_id =1002 OR vend_id=1003) AND prod_price>=10;
我们在实际操作中遇到OR
和AND
的WHERE
组合语句,都要加圆括号,能消除歧义
IN操作符
SELECT prod_name, prod_price
FROM product
WHERE vend_id IN(1002,1003)
ORDER BY prod_price;
操作符IN
完成与OR
相同的功能
NOT操作符
SELECT prod_name, prod_price
FROM product
WHERE vend_id NOT IN(1002,1003)
ORDER BY prod_price;
操作符NOT
支持对IN
,BETWEEN
和EXISTS
子句取反