MySQL3。0531
单表查询是指从一张表中查询所需要的数据。所有查询操作都比较简单
(1)查询所有字段
查询所有字段是指查询表中所有字段的数据。这种方式可以将表中所有字段的数据都查询出来。在MySQL中可以使用 “*” 代表所有的列,即可查出所有的字段,
字段的值查询语法格式:SELECT * FROM 表名,表名;
(2)查询指定字段
格式:SELECT 字段名 FROM 表名;
(3)查询指定数据
应用WHERE子句查询tb_login表,条件是user(用户名)为mr
select * from tb_login where user = ‘mr’;
(4)带IN关键字的查询
SELECT * FROM 表名 WHERE 条件 [NOT] IN(元素1,元素2,…,元素n);
例:应用IN关键字查询tb_login表中user字段为mr和lx的记录
SELECT * FROM tb_login WHERE user IN(‘mr’,‘lx’);
(5)带BETWEEN AND查询
SELECT * FROM 表名 WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2;
例:查询b_login表中id值在5-7之间的数据
SELECT * FROM tb_login WHERE id BETWEEN 5 AND 7;
(6)带LIKE的字符匹配查询
LIKE属于较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:“%”和下划线“_”;“%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0,“-”只匹配一个字符
例:查询tb_login表中user字段中包含mr字符的数据
select * from tb_login where user like ‘%mr%’;
(7)带IS NULL关键字查询空值
使用关键字IS NULL查询 tb_book表中row字段的值为空的记录
SELECT books,row FROM tb_book WHERE row IS NULL;
(8)带AND的多条件查询
select * from 数据表名 where 条件1 and 条件2 […AND 条件表达式n];
例:查询数据表tb_login中user字段值为mr,并且section字段值为PHP的记录
select * from tb_login where user=‘mr’ and section=‘php’;
(9)带OR的多条件查询
select * from 数据表名 where 条件1 OR 条件2 […OR 条件表达式n];
例:查询tb_login表中section字段的值为“PHP”或者“程序开发”的记录
select * from tb_login where section=‘php’ or section=‘程序开发’;
(10)用DISTINCT关键字去除结果中的重复行
select distinct 字段名 from 表名;
例:使用关键字DISTINCT去除 tb_login表中name字段中的重复记录
select distinct name from tb_login;
(11)用ORDER BY关键字对查询结果排序
ORDER BY 字段名 [ASC|DESC]; ASC表示按升序进行排序 。 DESC表示按降序进行排序
例:查询tb_login表中的所有信息,按照id序号进行降序排列
select * from tb_login order by id desc;
(12)用GROUP BY关键字分组查询
例:使用关键字GROUP BY对tb_book表中talk字段进行分组查询
use db_database09;
select id,books,talk from tb_book GROUP BY talk;
例:使用关键字GROUP BY和GROUP_CONCAT()函数对tb_book表中的talk字段进行分组查询
use db_database08;
SELECT author,GROUP_CONCAT(bookname) FROM tb_bookinfo GROUP BY author;
例:对数据表tb_book表中user字段和talk字段进行分组,分组过程中,先按照user字段进行分组,当user字段的值相等时,再按照talk字段进行分组
use db_database09;
select id,books,talk,user from tb_book GROUP BY user,talk;
(13)用LIMIT限制查询结果的数量
注意:LIMIT子句中的编号是从0开始的。
例:查询数据表tb_login中,按照id编号进行升序排列,显示前3条记录
select * from tb_login order by id asc limit 3;
例:查询tb_login表中,按照id编号进行升序排列,从编号1开始,查询两条记录
select * from tb_login where id order by id asc limit 1,2;
子主题 15聚合函数查询
聚合函数的最大特点是它们根据一组数据求出一个值。聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略
(14)count()函数
COUNT()函数,对于除“”以外的任何参数,返回所选择集合中非NULL值的行的数目
例:使用count()函数统计数据表 tb_login中的记录数
**select count() from tb_login;**
(15)sun()函数
SUM()函数可以求出表中某个字段取值的总和。
例:使用sum()函数统计数据表 tb_book中图书的访问量字段(row)的总和
select row from tb_book;select sum(row) from tb_book;
(16)avg()函数
AVG()函数可以求出表中某个字段取值的平均值
例:使用AVG()函数求数据表tb_book中row字段值的平均值
select AVG(row) from tb_book;
(17)max()函数
MAX()函数可以求出表中某个字段取值的最大值。
例:使用MAX()函数查询数据表tb_book中row字段的最大值
select MAX(row) from tb_book;
(18) min()函数
MIN()函数可以求出表中某个字段取值的最小值
例:使用MIN()函数查询数据表tb_book中row字段的最小值
select MIN(row) from tb_book;
(19)时间和日期函数
CURDATE()和CURRENT_DATE()函数
CURDATE()和CURRENT_DATE()函数获取当前日期
select curdate(),CURRENT_DATE();
CURTME()和CURRENT_TIME()函数
CURTIME()和CURRENT_TIME()函数获取当前时间
NOW()函数
NOW()函数获取当前日期和时间。
DATEDIFF(d1,d2)函数
DATEDIFF(d1,d2)用于计算日期d1与d2之间相隔的天数
ADDDATE(d,n)函数
ADDDATE(d,n)用于返回起始日期d加上n天的日期
ADDDATE(d,INTERVAL expecttype)函数
ADDDATE(d,INTERVAL expr type)函数返回起始日期d加上一个时间段后的日期
SUBDATE(d,n)函数
SUBDATE(d,n)函数返回起始日期d减去n天的日期
子查询
(20)带IN关键字子查询
IN运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查询。
例:查询tb_login表中的记录,但user字段值必须在tb_book表中的user字段中出现过
select * from tb_login where user in(select user from tb_book);
(21)带比较运算的子查询
子查询可以使用比较运算符。这些比较运算符包括=、!=、>、>=、<、<=等。比较运算符在子查询时使用的非常广泛。
子主题 2例:查询图书访问量为“优秀”的图书,在tb_row表中将图书访问量按访问数划分等级
select id,books,row from tb_book where row>=(select row from tb_row where id=1);
(22)带exists关键字子查询
使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true),否则,将返回一个假值(false)
例:使用子查询查询tb_book表中是否存在id值为27的记录,如果存在则查询tb_row表中的记录,如果不存在则不执行外层查询
select * from tb_row where exists (select * from tb_book where id=27);
当EXISTS关键字与其他查询条件一起使用时,需要使用AND或者OR来连接表达式与EXISTS关键字。
例:如果tb_row表中存在name值为“优秀”的记录,则查询tb_book表中row字段大于大于等于90的记录
select id,books,row from tb_book where row>=90 and exists(select * from tb_row where name=‘优秀’);
(23)带any关键字子查询
ANY关键字表示满足其中任意一个条件。使用ANY关键字时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。
例:查询tb_book表中row字段的值小于tb_row表中row字段最小值的记录
select books,row from tb_book where row<ANY(select row from tb_row);
(24)带all关键字子查询
ALL关键字表示满足所有条件。使用ALL关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。
例:查询tb_book表中row字段的值大于tb_row表中row字段最大值的记录
select books,row from tb_book where row>=ALL(select row from tb_row);
(25)合并查询结果
合并查询结果是将多个SELECT语句的查询结果合并到一起。合并查询结果使用UNION和UNION ALL关键字。
select user from tb_book union select user from tb_logion;
(26)定义表和字段的别名
在查询时,可以为表和字段取一个别名,这个别名可以代替其指定的表和字段。为字段和表取别名,能够使查询更加方便。而且可以使查询结果以更加合理的方式显示。
1、为表取别名
当表的名称特别长时,在查询中直接使用表名很不方便。这时可以为表取一个贴切的别名。
select * from tb_program pwhere p.talk=‘php’;
2、为字段取别名
当查询数据时,MySQL会显示每个输出列的名词。默认情况下,显示的列名是创建表时定义的列名。我们同样可以为这个列取一个别名
select 原名 as 现名 ,原名 as 现名 from 表名;