SQL必知必会(一)

1. 检索数据
--要注意DISTINCT关键字,而且不能部分使用DISTINCT,即它会作用于所有的列
SELECT DISTINCT keyword FROM table;		

--限制结果数量,使用LIMIT关键字。OFFSET关键字则用来表示从哪一行开始,第一行数字是0
SELECT prod_name 
FROM Products 
LIMIT 5 OFFSET 5;	--从第六行开始(包括第六行)后面五个
2. 排序检索数据
--order by子句取一个或多个列的名字,据此对输出进行排序。它应该是SELECT 语句中最后一条子句
SELECT prod_name 
FROM Products 
ORDER BY prod_name;

--按多个列进行排序的写法,只需要将列用逗号隔开就行
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

--也可使用列位置来排序
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;		--这里的2,3是指SELECT后面的相对位置

--执行排序方向,一般默认为升序,降序需使用关键字DESC
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC;	--这里将结果按照prod_price降序排列

--可以对多个列进行排序,并分别指定每列的排序方式,DESC要直接应用到某一列后面
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;	--prod_price降序,相同价格内prod_name升序排列
3. 过滤数据
--使用WHERE子句来进行过滤
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;	--返回prod_price为3.49的行

--要注意同时使用ORDER BY和WHERE子句时,应将ORDER BY位于WHERE之后

--WHERE子句操作符看下面的表

--范围查询使用BETWEEN 和 AND关键字
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;		--选择价格在5和10之间的行

--空值NULL和字段包含0、空字符串或仅仅包含空格是不一样的
SELECT cust_name
FROM Customers
WHERE cust_email IS NULL;	--判断空值时不能用 "= NULL",而应该用"IS NULL"
操作符说明操作符说明
=等于>大于
<>不等于>=大于等于
! =不等于! >不大于
<小于BETWEEN在指定的两个值之间
<=小于等于IS NULL为NULL值
! <不小于
4. 高级数据过滤
--使用关键字AND组合WHERE子句
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = 'DLL01' AND prod_price <= 4;	--可以在后面放ORDER BY子句

--使用关键字OR组合WHERE子句
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';	--两个条件有一个成立就行

--AND关键字优先级高于OR,所以有时会用括号来改变优先级

--IN操作符用来指定条件范围,通常用括号包含多个值
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01')	--vend_id值只要匹配括号中的一个就要这一行,会提前
ORDER BY prod_name;
--有时候需要连表查询,此时我们可以先在一个小表中查询出来,然后再使用IN关键字找符合的行

--NOT操作符用来否定其后所跟的任何条件,而且不会单独使用,如NOT IN等
SELECT prod_name
FROM Products
WHERE NOT vend_id = 'DLL01'		--NOT用来否定后面的等于条件
ORDER BY prod_name;
5. 用通配符进行过滤
--LIKE操作符用来进行通配运算,它是谓词而不是一个操作符

--百分号(%)通配符表示任何字符出现任意次数,其实就是任意串
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE 'Fish%';
--%可以放在任何位置,但是它不会匹配为NULL的行
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '%bean bag%';		--选择产品名称包含bean bag的商品

--下划线(_)通配符,它只匹配单个字符,而不是多个
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE '__ inch teddy bear';	--两个下划线,要匹配两个字符

--方括号([])通配符用来指定一个字符集,必须匹配指定位置(通配符位置)的一个字符
--注意这个地方MySQL使用的是REGEXP操作符和正则表达式来实现的

--要知道通配符是会影响查询效率的,比如不会走索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值