七、数据查询
7.1、单表查询
1、语法:
select <[列名1,列名n 或通配符 [as 别名] ]> from 表名;
as:将某个字段取个别名
2、语法:
select distinct <[列名1,列名n 或通配符]> from 表名;
去掉重复项,对应的字段前加
符号表达:
7.1.1、where常用关键字
- AND、OR:连接多个条件
- BETWEEN AND:在…之间
- IS NULL:查询空值
- IN:查询在某个集中中
- LIKE:模糊查询
7.1.2、通配符
** ”*“通配符:匹配任意列名 “_"通配符:匹配单个字符 “%”通配符:匹配任意字符**
7.1.3、order by子句
可以使用order by子句对查询结果安装一个或多个属性列(多个属性逗号隔开)的升序(ASC)或降序(DESC)排列,默认为升序。
--查询结果按照bookPrice列值的降序排列
select * from books order by bookPrice desc;
7.1.4、聚集函数
例:
#查询book表中年龄最大的
select max(age) from book;
7.1.5、group by子句
将查询结果按某一列或多列的值分组,值相等的为一组。
select count(*),pressName from books group by pressName;
如:下列表中,叫 “人民邮电出版社” 名字的有1个,叫 ”清华大学出版社“ 的有6个。
7.2、连接查询
根据两个表或多个表的列之间的关系来查询数据,即连接查询。
7.2.1、简单连接
连接查询实际是通过表与表之间相互关联的列进行数据的查询,对于关系数据库来说,连接是查询最主要的特征。 简单连接使用逗号将两个或多个表进行连接,也是最常用的多表查询形式。
例:
select b.reader_id,br.book_name from books b,borrow_record br where b.ISBN=br.ISBN;
7.2.2、JOIN连接
除了使用逗号连接外,也可使用JOIN连接。
7.2.2.1、内连接(inner join)
1)等值连接
select * from books b inner join borrow_record br where b.ISBN=br.ISBN;
2)不等连接
select * from books b inner join borrow_record br where b.ISBN<>br.ISBN;
7.2.2.2、外连接(left join 、right join)
1)左连接 on后面也可使用 where执行条件判断
select * from books b left join borrow_record br on b.ISBN=br.ISBN;
2)右连接 on后面也可使用 where执行条件判断
select * from books b right join borrow_record br on b.ISBN=br.ISBN;
7.3、嵌套查询
SQL语言中,一个select-from-where语句被称为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询被称为嵌套查询。 语法:select <字段名或通配符> from <表或视图名> where [表达式] (select <字段名或通配符> from <表或视图名> where [表达式] )
7.3.1、带有IN谓语的子查询
select * from books where isbn in (select * isbn from brrowrecord where reader_id='201801');
7.3.2、带有比较运算符的子查询
指父查询与子查询之间用比较运算符连接。可以用 >、<、=、>=、<=、!=、<> 等比较运算符。
select * from books where isbn=(select * isbn from brrowrecord where reader_id='201801');
7.3.3、带有ANY(SOME)或ALL谓语子查询
子查询返回值单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓语,使用ANY或ALL谓语时必须同时使用比较运算符。
谓语释义:
例:
#查询读者编号为"201801"的学生未借阅的所有图书的详细信息;
select * from books where isbn <> all(select isbn from brrowwrecord where reader_id="201801");
7.3.4、带有EXISTS谓语的子查询
EXISTS谓语的子查询不返回任何数据,是一个布尔值(true或false)逻辑判断。使用存在量词EXISTS后,若内层查询结果为空,则外层的WHERE子句返回ture,否则取反。 例:
#查询读者编号为201801的读者没有借阅过的图书信息
select * from books where not exists (select * from borrowrecord where isbn=books.isbn and reader_id="201801");
7.4、合并查询
#两个表字段合并显示,两个表相同字段合并后显示一次
select * from t_major1 union select * from t_major;
评论( 0 )