一般约定:
虽然SQL不区分大小写,但是对于我们会对SQL关键字使用大写,对表名和列名使用小写。
一条SQL语句可以不使用;对于多条SQL语句必须用分号隔开。
一、简单查询
1、检索单个列:
SELECT prod_name FROM products
2、检索多个列:
SELECT prod_id,prod_name FROM products
3、检索所有列:
SELECT * FROM products
4、检索不同的行:
SELECT DISTINCT vend_id FROM products :DISTINCT 关键字返回的id都是不同的。
5、限制结果:
返回的结果不多于5行:SELECT prod_name FROM products LIMIT 5
从第五行开始查后面的5行:SELECT prod_name FROM products LIMIT 5,5
6、排序数据:默认是升序排ASC, 也可以指定降序DESC
(1)单列排序:
SELECT prod_name FROM products ORDER BY prod_name
(2)多列排序:首先按名字排,再按价格排;
SELECT prod_name,prod_price,prod_id FROM products ORDER BY prod_name,prod_price
(3)单列降序:
SELECT prod_name FROM products ORDER BY prod_name DESC
(4)多列降序:价格最贵的在前面,然后再按名字排序
SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC,prod_name
二、条件查询Where语句
1、 相等、大于小于、不等于
(1)SELECT prod_name,prod_price FROM products WHERE prod_price = 2.50
(2)SELECT prod_name,prod_price FROM products WHERE prod_price <= 10
(3)SELECT prod_name,prod_price FROM products WHERE prod_price <> 10
(4)范围查询:BETWEE x AND Y [x,y]
SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10
(5)空值检查:IS NULL 和 IS NOT NULL
SELECT prod_name,prod_price FROM products WHERE prod_price IS NULL
SELECT prod_name,prod_price FROM products WHERE prod_price IS NOT NULL
2、组合where字句
(1)AND 和 OR
SELECT prod_id,prod_name,prod_price FROM products WHERE vend_id = 1003 AND prod_price <=10
SELECT prod_id,prod_name,prod_price FROM products WHERE vend_id = 1003 OR prod_price <=10
(2)
AND 和 OR 结合:注意AND优先级比较高,会优先处理AND
SELECT prod_id,prod_name,prod_price FROM products WHERE vend_id = 1003 or vend_id = 1002 and prod_price >=10
解决方法:加()
SELECT prod_id,prod_name,prod_price FROM products WHERE (vend_id = 1003 or vend_id = 1002) and prod_price >=10
(3) IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_price
相当于 vend_id=1002 OR vend_id=1003
(4) 不在范围内:NOT IN
-
使用IN 一般比OR快,IN 中可以包含select语句
3、通配符进行过滤
(1)like : 模糊查询。%表示任何字符出现任意次数:%x%, x%t, x%
查询名字以jet开头的产品名列表:区分大小写---- jet Jet
SELECT prod_name FROM products WHERE prod_name like 'jet%'
(2)下划线 _ 也可以做匹配,但是只能匹配一个字符
4、正则表达式
随着查询条件的复杂性增加,where 字句本身的复杂性也增加,这时候我们就应该考虑正则表达式。
正则表达式的作用是匹配文本,将一个正则表达式与一个文本串进行比较。
语法:REGEXP + 表达式(其实很类似like语句), 不过有区别:
like匹配整个列,全匹配(不使用通配符)
regexp : 包含就可以
(1)查询name中包含文本1000 的所有行
SELECT prod_name FROM products where prod_name REGEXP '1000'
(2)
.
表示匹配任意字符 :
查询name中包含文本 x000 的所有行
SELECT prod_name FROM products where prod_name REGEXP '
.
000'
(3)其他例子
regexp 1000|2000 : 或
regexp [123] Ton : 匹配特定字符,另一种形式的或语句
regexp [1-5] Ton : 匹配范围
特殊字符要\\转义
^ :文本开始
$ : 文本结束
*[0,x]、+[1,x]、?[0,1]
.....