MYSQL必知必会笔记

SELECT语句

使用select语句,必须至少有两条信息,想选择什么,从哪选择。

单个语句结束必须加上分号,SQL语句不区分大小写。

检索单个列

select pro_name from products

检索多个列

在多个列名并列,使用逗号分隔开来

select pro_id,pro_name,pro_price from products

检索所有列

使用通配符'*'来标识所有的列

select * from products

检索不同的行

使用select检索某一列时,会将该列中所有行的数据都检索出来,如下图所示

Distinct.png

如何检索行值不同的列,使用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设置搜索条件

where.png

用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
concat.png

计算字段

MySQL还可以对检索出来的数据进行数学计算,包括+、*、-、/

select prod_id,quantity,item_price,quantity*item_price as expanded_price from products where order_num=20005
计算字段.png

聚集函数

聚集函数.png
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;//只计算价格不同值的平均值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容