尼采般地抒情

公告栏

此网站主题为本人手写主题,主题还在开发中……


作者:尼采般地抒情
本站主页面和blog页面暂时一样,目的是为了百度收录,百度收录之后,会将主页换回引导页~

站点信息

文章数目:195
已运行时间:
目录
  1. 基本词汇
    1. distinct
    2. where
    3. as
    4. like
    5. is not
    6. and、or
    7. top
    8. not in
    9. 多表查询
    10. join on
    11. count
    12. order by
    13. limit
    14. union
  2. group by
    1. having
    2. asc、desc
  3. 子查询
    1. ① 使用比较运算符的子查询
    2. ② 使用[not]in 的子查询
    3. ③ 使用[not]exists 的子查询

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题,主题还在开发中……


作者:尼采般地抒情
本站主页面和blog页面暂时一样,目的是为了百度收录,百度收录之后,会将主页换回引导页~

站点信息

文章数目:195
已运行时间:

基本词汇

查询就是 SELECT 语句

SELECT  [ ALL | DISTINCT ]
        [ TOP expression [ PERCENT ] [ WITH TIES ] ]
    <列名>                                             /*指定要选择的列及其限定*/
    [ INTO <表名> ]                             /*INTO子句,指定结果存入新表*/
    [ FROM <查询对象> ]                        /*FROM子句,指定表或视图*/
    [ WHERE <条件> ]                             /*WHERE子句,指定查询条件*/
    [ GROUP BY <分组表达式>]                 /*GROUP BY子句,指定分组表达式*/
    [ HAVING <分组统计条件>]                 /*HAVING子句,指定分组统计条件*/
    [ ORDER BY <排序表达式> [ ASC | DESC ] ] /*ORDER子句,指定排序表达式和顺序*/

说明:所有被使用的子句必须按语法说明中显示的顺序严格地排序。例如,一个 HAVING 子句必须位于 GROUP BY 子句之后,并位于 ORDER BY 子句之前。
SELECT 语句返回一个表的结果集,通常该结果集被称为表值表达式。

distinct

去掉重复的行

where

条件

select distinct Sname
        from Student
        where Sdept='CS'

as

SELECT id AS userId,username AS uname
    FROM users;

查询出来的列名,就变成了别名。AS 其实可以省略,但可能会出现问题。

SELECT id username  FROM users;

这样会将 username 视作 id 的别名。

like

SELECT 书名 AS BookName, 作译者 AS Author, 出版社 AS Press
FROM TBook
WHERE 书名 LIKE '%SQL Server%'
select Sname, Sno, Ssex
    from Student
    where Sname not like '刘_'

is not

select Sno, Cno
    from SC
    where Grade is not null

and、or

select Sname, Ssex
    from Student
    where Sdept='CS' or Sdept='MA' or Sdept='IS'

键可以不用引号,但是值要引号
列名又空格也需要加引号

top

前五行数据

select top 5 *
    from rating

not in

select Sname, Ssex
    from Student
    where Sdept not in ('CS', 'MA', 'IS')

多表查询

  • 有公共的列,在前面表名以示区分
  • 指明两个表的公共相等的列
select TLend.ISBN, TLend.借书时间, TLend.借书证号, TLend.图书ID, TLend.应还时间,TReader.姓名
from TReader,TLend, TBook
where TReader.借书证号 = TLend.借书证号
    and TBook.ISBN = TLend.ISBN
    and TLend.借书证号 = '081101'
    and TBook.书名 = 'SQL Server实用教程(第3版)'

join on

select 姓名
    from TReader join HLend
    on TReader.借书证号 = HLend.借书证号
    where (还书时间 - 借书时间)>5

count

select count(*) 读者总数
    from TReader

order by

排序 ORDER BY

select Sno, Grade
    from SC
    where Cno='3'
    order by Grade desc
SELECT *
        FROM users
    ORDER BY id DESC;

可以排序多个字段,如果第一个字段能排出结果,就不会用到第 2 个字段。比如:

select *
    from Student
    order by Sdept asc, Sage desc

因为年龄 age 有相同的,继续排序就要用到 id 的降序。

limit

限制返回记录的数量 LIMIT

LIMIT 有两种语法结构,第一种比较常见。

[LIMIT {[offset,] row_count|row_count OFFSET offset}]

起始位置,偏移量

SELECT * FROM users ;
SELECT * FROM users LIMIT 3,2;
SELECT * FROM users LIMIT 2;

3,2:表示从第 3 条开始返回,返回两条记录。注意记录从 0 开始编号,即结果集中的从第 0 条开始。
如果 LIMIT 后面只有一个参数,认作是偏移量,起始位置缺省为 0。

union

合并查询结果 UNION

在多条查询语句之间,使用UNION关键字会合并所有查询结果。
默认会去掉重复行,如果不想去掉重复行,请使用UNION ALL
需要注意的是,要联合的查询结果必须有相同的列数(列名可以不同)

去重效率比不去重效率低

group by

[GROUP BY {col_name|position} [ASC|DESC],...]
select 专业, count(*) 不同专业人数
    from TReader
    group by 专业

having

与 GROUP BY 分组联用。只对部分记录做分组操作。有两种用法,比如:

SELECT sex,age
    FROM users
  GROUP BY sex
  HAVING age > 35;
SELECT sex
    FROM users
  GROUP BY sex
  HAVING count(id) >=2;
  • 第一种,注意后面的 HAVING 的字段必须在前面 SELECT 部分出现才行。
  • 第二种,在 HAVING 后面使用聚合函数,前面无需出现相应字段。

asc、desc

排序升序 asc、降序 desc

SELECT *
    FROM TReader
    WHERE 专业='计算机'
    ORDER BY 出生时间 desc

子查询

子查询(Subquery)是指嵌套在查询内部,且必须始终出现在圆括号内。外面的查询并非只是指的查找。可以包含的关键字或条件:

DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等

外层的查询可以是:

SELECT、INSERT、UPDATE、SET、DO

① 使用比较运算符的子查询

  • 比较运算符

    =,>,<,>=,<=,<>,!=,<=>

SELECT *
    FROM av
  WHERE 身高>=(
    SELECT AVG(身高)
    FROM av);
  • 修饰比较运算符

    使用 ANY、SOME、ALL,ANY 和 SOME 是等价的。

ANY ALL
>,>= 最小值 最大值
<,<= 最大值 最小值
=,<=> 任意值
<>,!= 任意值
select emp.empno,emp.ename,emp.job,emp.sal
    from scott.emp
  where sal >any(
    select sal
    from scott.emp
    where job="MANAGER");

等价于下边两步的执行过程:
(1)执行“select sal from scott.emp where job=”MANAGER””
(2)查询到 3 个薪水值 2975、2850 和 2450,父查询执行下列语句:
select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where** sal >2975 or sal>2850 or sal>2450;**

② 使用[not]in 的子查询

operand comparison_operator [NOT] IN (subquery)

=ANY 和 IN 等效
!=ALL 和 NOT IN 等效

③ 使用[not]exists 的子查询

如果子查询返回任何行,EXISTS 将返回 TRUE,否则返回 FALSE。
该类子查询使用较少

博客内容遵循: 署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0)

本文永久链接: https://www.wztlink1013.com/blog/igxqxi/

编辑: 部署: 订阅:

评论区

Twikoo 转换 utterances

最新评论

Loading...