Select 查询语句
a、Mysql 使用select 语句查询数据
b、select 语句的作用是从一个或多个表中查询信息
c、使用select语句,必须至少给出两条信息
1) 选择什么
2) 从什么地方选择
注意: SQL语言中,不区分大小写,每一句的SQL语句,使用”;“表示结尾
以下语法说明: 数据库名:mydb
表名:stu
1、查询特定列
格式:
select 列名 from mydb.stu;
select 列名 from stu;
说明:如果在from后面直接使用表名的话,需要先指定使用的数据库
查询多列
格式:
select 列1,列2,... from mydb.stu;
select 列1,列2,....from stu;
说明:如果在from后面直接使用表名的话,需要先指定使用的数据库
查询所有列
格式:
select * from mydb.stu;
select * from stu;
说明:如果在from后面直接使用表名的话,需要先指定使用的数据库
避免查询到重复的内容
如果查询到的两行内容一样,默认情况下,Mysql 会显示这些重复的行,如果需要相同的行只显示一次,可使用 distinct 关键字
格式:
select distinct 列名 from mydb.stu;
select distinct 列名 from stu;
说明:如果在from后面直接使用表名的话,需要先指定使用的数据库
2、设定查询结果返回的行数
a、如果一个表的行非常多,客园使用limit关键字,指定需要返回多少行
格式:
select 列名 from stu limit n; #显示查询结果的前 n 行
select 列名 from stu limit n,m; #只显示查询结果第 n 行开始后面的m 行
说明:mysql 中的行号是从 0 开始计算的,limit 2,3 是从第3行往后数3行,也是就 3、4、5行
3、查询结果排序
a、为了明确地排序用select 语句查询出的数据,可使用order by 语句
order by 语句取一个或多个列的名字,根据这些列进行排序
格式:
select 列名 from stu order by 列名;
说明:根据列名排列的可以是 select对应的列也可以是本身数据有的列表
select 列名 from stu order by 列1,列2;
说明:列1全部相同时,才会采取列2再次进行排序
排序是根据ASCII码进行排序
b、指定排序方向
order by 语句默认是按照升序排序(从A到Z),关键字是ASC
可以给order by 语句指定降序(从Z到A),关键字是DESC
说明:DESC关键字只应用到直接位于其前面的列
格式:
select 列1 from mydb.stu order by 列1 desc;
select 列1 from mydb.stu order by 列1 desc,列2; #只针对列1 进行降序
select 列1 from mydb.stu order by 列1 asc;
4、order by 与 limit 组合
a、使用order by 和limit 组合,能够找出一个列中最高或者最低的值
格式:
select 列1 from mydb.stu order by 列1 desc limit 1;
说明:order by 子句位于from 子句后面,如果使用limit ,那么limit 必须位于order by 之后
可理解为,排序之后进行取值
5、条件查询与通配符
a、查询结果过滤
1) 数据库表中一般包含大量的数据,很少需要查询表中所有的行,通常只会根据特定的需要提取表中的一部分数据。这个hi和需要指定查询条 件,即过滤条件
2)在select 语句中,数据库根据where 子句中指定的查询条件进行过滤。where 子句位于表名之后
格式:
select 列名 from 表名 where 列 满足的条件;
实例:
从 stu 表中查询两列,只返回 列uid 值为 001的行
select * from stu where uid = 001;
注意:在同时使用order by 和 where 子句时,order by 应位于 where 之后,否则将会产生错误
where 语句支持的操作符
实例:
从表stu 中查找名字为 张三的数据
select * from stu where name = '张三';
从表stu 中查找用户id 小于 10的数据
select * from stu where id <10;
从表stu 中查找 电话号码为空的数据
select * from stu where phonenum IS NULL;
从表stu 中查找 电话号码为不空的数据
select * from stu where phonenum IS NOT NULL;
从表stu 中查找 用户id 不等于 001的数据
select * from stu where id <> 001;
select * from stu where id != 001;
从表stu 中查找用户id 在50到100 的范围内的数据
select * from stu where id between 50 and 100;
说明: between ... and ... 包含边界值
b、and 操作符
1) Mysql 支持在where 子句中给出多个条件,这些条件可以使用and 子句表示条件都满足时返回指定的行
格式:
select 列名 from stu where '列1满足条件' and ‘列2满足的条件’;
实例:
从表stu 查询 id 为001 且名字叫 张三的数据
select * from stu where id = 001 and name = ‘张三’;
c、or 操作符
1) Mysql 支持在where子句中给出多个条件,这些条件可以使用or子句表示条件中只需要有一个条件满足时返回指定的行
格式:
select 列名 from stu where ‘列1满足条件’ or ‘列2 满足的条件’;
实例:
从表 stu 查询id 为001 或者名字叫张三的数据
select * from stu where id= 001 or name = '张三';
AND/OR 条件组合中的顺序
1) and/or 条件组合中的顺序
2)and的优先级高于or,当 and/or 中有多个条件的时候,需要使用()把各个条件明确的分组,防止条件的错误组合导致返回的结果不正确
说明:圆括号 > and > or (>代表优先级)
实例
从表stu 查询id 为 001 或 002 且学历为 本科的
select * from stu where (id = 001 or id= 002) and edu = ‘本科’;
注意: 在使用 and / or 操作符的 where 子句中,都应该使用圆括号明确的分组操作符,以达到期望的查询目的
d、IN操作符
1) in 操作符用来指定条件范围,范围中的每个条件都可以进行匹配,IN取值包含在圆括号内,以逗号分隔
格式:
select 列 from 表 where 列 in (value1,value2 ,....)
实例
从表stu 中查询 用户id 在(001 到 010)范围中
select * from stu where id in (001,010);
IN 操作符特点:
-1: in操作符的语法清晰直观
-2:计算次序容易管理
-3:in操作符一般比or 操作符执行速度更快
-4:in可以包含其他select 语句,使得能够动态地建立where 子句
e、NOT操作符
1) where 子句中的not 操作符只有一个功能,即否定它之后所跟的任何条件
2) 使用not 很容易找到与条件列表不匹配的行
实例
从表stu 中找不 id 不为 001和010 的数据
select * from stu id not in (001,010);
注意:Mysql 只支持使用not 对in 、between和exists 子句取反
f、LIKE操作符
1) 通配符是用来匹配值的一部分的特殊字符
2) 为了在查找子句中使用通配符,必须使用like 操作符,like指示Mysql 后跟的查找模式利用通配符匹配而不是直接相等匹配进行比较
-1:百分号(%)通配符
百分号(%)在查出串中,%表示任何字符出现任意次数,但是不能匹配null
实例
从表stu查找出生年月为1996-04所有人的数据
select * from stu where birth like ‘1996-04%’
-2:下划线 (_)通配符
下划线的用途与% 一样,但是下划线只匹配单个字符而不是多个字符
实例
从表stu 查找名字为‘三’,姓可不同的数据
select * from stu where name like ‘_三’;
通配符的特点:
a、与%不一样,_总是匹配一个字符,不能多也不能少
b、使用通配符会比没有通配符更小孩数据库执行查询的时间,应该在需要使用通配符的地方才使用