SELECT语句
使用select语句,必须至少有两条信息,想选择什么,从哪选择。
单个语句结束必须加上分号,SQL语句不区分大小写。
检索单个列
select pro_name from products
检索多个列
在多个列名并列,使用逗号分隔开来
select pro_id,pro_name,pro_price from products
检索所有列
使用通配符'*'来标识所有的列
select * from products
检索不同的行
使用select检索某一列时,会将该列中所有行的数据都检索出来,如下图所示
如何检索行值不同的列,使用DISTINCT关键字,只返回行值不同的列
select distinct vend_id from products
DISTINCT关键字默认作用在所有的列上,而不仅仅是前置列。
限制结果
LIMIT关键字可以限制返回的行数
select prod_name from products limit 5,5;
选取从第五行开始的五行。MySQL行计数从0开始 ,从行0开始选择,则省略0
排序检索数据
排序数据
如果希望选择出来的数据根据某个列的值进行排序,可以使用ORDER BY关键字
select prod_name from products order by prod_name;
按多个列排序数据
与select选择多列一样,只需用逗号将列名分隔开来即可
select prod_name from products order by prod_price,prod_name
指定排序方向
order by关键字的默认排序方向时增序,如果想要降序使用DESC关键字
select pro_name from products order by prod_prices desc
DESC关键字默认只作用于关键字前面的那个列,其与DISTINCT关键字不同,如果想要多个列都适用降序,则在每个列之后都增加DESC关键字。
ORDER BY关键字与LIMIT搭配使用,可以选择指定的几行,比如说选择价格最低的商品的名字
select prod_name from products order by prod_price desc limit 1;
LIMIT语句应该位于ORDER BY语句之后
过滤语句
WHERE过滤语句
使用select语句时可以用where设置搜索条件
用BETWEEN关键字的时候,需要范围的开始值和结束值,比如
select prod_name from products where prod_price between 5 and 10
在表中,当一个列不包含值,称其为空值NULL,与字段包含0、空字符串或仅仅包含空格不同
WHERE语句也可以用来直接判空
select prod_name from products where prod_price is NULL
ORDER BY语句可以与WHERE语句搭配,置于WHERE语句之后
AND和OR操作符可以用来增加WHERE语句的多样性
select prod_name from products where prod_id=1 or prod_id=12
select pro_name from products where vend_id=1003 and prod_price<=10;
在计算的时候,AND的优先级高于OR的优先级,根据实际情况,对AND或者OR并列的子句进行加括号处理
IN关键字
WHERE语句用来指定要匹配值的清单关键字,功能与OR相当
对于IN的合法取值由逗号分隔开全部在圆括号中
select prod_name from products where vend_id in (1002,1003) order by prod_name
为什么要使用IN操作符:
- IN操作符的比OR的执行速度更快
- IN的最大优点是可以包含其他的SELECT语句
NOT关键字
WHERE语句中的NOT操作符有且只有一个功能就是否定它之后所跟的任何条件
select prod_name from products where vend_id not in (1002,1003) order by prod_name
LIKE通配符
使用LIKE关键字以及‘%’符号可以对字符串内容进行模糊匹配,‘%’可以匹配多个甚至0个字符,但是不能匹配NULL内容;‘_’只能匹配单个字符
select prod_id from products where prod_name like '%anvil%'
select prod_id from products where prod_name like '_nvil'
正则表达式匹配
正则表达式意义为只要列值中出现我想要匹配的字符,即可进行返回
基本匹配
select prod_id from products where prod_name regexp '1000'
‘.’是正则表达式中的一个特殊字符,可以表示任意内容
OR匹配
可以使用OR关键字进行或的匹配
select prod_id from products where prod_name regexp '1000|2000'
[ ] 匹配多个字符
select prod_id from products where prod_name regexp '[123] ton'
这里的[123]就是上述关键字OR表示的1|2|3的意思,如果是一个范围,可以用[1-5]这样的形式来表示,不仅仅是数字,字母也可以[a-z]
特殊字符匹配
如果想要匹配‘.’这样的特殊字符如何匹配呢,上面也提到‘.’可以匹配任何字符
使用’\\‘进行转义
select prod_id from products where prod_name regexp '\\.'
拼接字段和别名
选择列时可能会希望将几个列的值并列在一起显示,并且指定为一个新的名字。
拼接的关键字是Concat函数,别名的关键字是AS函数
select concat(vend_name,' (',vend_country,' )') as vend_title from products order by vend_name
计算字段
MySQL还可以对检索出来的数据进行数学计算,包括+、*、-、/
select prod_id,quantity,item_price,quantity*item_price as expanded_price from products where order_num=20005
聚集函数
select avg(prod_price) as avg_price from products;
select count(*) as row_sum from products;//count(*)对表中所有的行进行计数,不管表中包含的是空值(NULL)还是非空值
select count(prod_id) as id_num from products;//只对列中具有值的行进行计数,忽略NULL值
select max(prod_price) as max_price from products;
select min(prod_price) as min_price from products;
select sum(prod_price) as sum_price from products;
以上五个聚集函数默认都是对所有的行进行计算,如果使用DISTINCT关键字在列名之前,默认只会计算不同的值
select avg(distinct prod_price) as avg_price from products;//只计算价格不同值的平均值