SQL课程笔记——单表查询

简单的查询语句

数据查询语言(DQL:Data Query Lanuage)

主要包括SELECT(检索)

1.语法
SELECT [ALL/DISTINCT]<目标表达式> [,<目标表达式>]…
FROM <表名或视图名> (<SELECT语句>) [AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名 1> [HAVING<条件表达式>]]
[ORDER BY<列名 2> [ASC|DESC]]

语句含义是:

根据 WHERE 子句的条件表达式
FROM子句指定的基本表,视图或派生表中找出满足条件的元组,
再按 SELECT 句中的目标列表表达式选出元组中的属性值形成结果表,目标列表表达式中有*(指所有列,执行时多一步去字典里查询),或者指定列名
GROUP BY子句是将结果按照<列名 1>的值进行分组,该属性列值相等的元组为一个组,如果带HAVING短语,则只有满足指定条件的组才予以输出
ORDER BY子句,是指结果表还要按照<列名二>的值升序或者降序排序

2.语句相关概念

  • 关键字
  • 语句
  • 子句

3.书写规则

  • 不区分大小写
  • 可以按行写
  • 关键字不可以缩写,分开以及跨行书写
  • 关键字最好用大写
  • Tab和缩进的使用可以提高程序的可读性

4.算术运算符及其优先级,用于查询经过计算的值

  • 加 ‘+’
  • 减 ‘-’
  • 乘 ‘*’
  • 除 ‘/’
  • 括号 ‘()’

5.空值NULL
空值是指一种无效的,为负值,未知的或不可用的值,不同于零或者空格

  • 算术表达式的空值(空值参与算术运算都为空)

6.列别名

  • 列别名(用来重新命名列的显示标题,如果包含计算列,通常使用列别名)
  • 使用列别名的方法
    1.方式一:列名 列别名
    2.方式二:列名 AS 列别名
  • 以下三种情况列别名两侧需要添加双引号
    1.列别名中包含有空格
    2.列别名中要求区分大小写
    3.列别名中包含有特殊字符

7.连接操作符

  • 用于连接列与列,列和字符

  • 形式上是“||”

  • 用于创建字符表达式的结果列

    SELECT ename||job AS "Employees"

8.原义字符串(直接输出)
SELECT ename||'is a '||job AS "Employees"

9.选择表中的若干元素

  • 消除重复行

    SELECT DISTINCT <目标表达式>
    FROM <表名或视图名>

  • 查询满足条件的元组

查询条件谓词
比较= , < , > , <= , >= , != , <> , !> , !< ; NOT+上述比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定范围IN,NOT IN
字符匹配LIKE, NOT LIKE
空值IS NULL, IS NOT NULL
多重条件AND,OR,NOT

(1)比较大小

WHERE <目标表达式><比较><比较值>

WHERE name='张三';

(2)确定范围

WHERE BETWEEN <下限> AND <上限>
WHERE NOT BETWEEN<下限>AND<上限>

WHERE age BETWEEN 20 AND 23

(3)确定集合

IN可以用来查找属性值属于指定集合的元素
WHERE <目标表达式>IN<指定集合1>...

WHERE age IN (20,30)

(4)字符匹配

LIKE可以用来进行字符串的匹配

 [NOT] LIKE '<匹配串>'  [ESCAPE'<换码字符>']

其含义通常是查找指定的属性列值与<匹配串>相匹配的元组 。
<匹配串>可以是一个完整的字符串,也可以含有通配符 % (a%b表示以a开头b结尾的任意长度的字符串,如acb、addgb等)和 _ (a_b表示a开头b结尾的长度为3的任意字符串,如acb,agb等)

  • LIKE后不含通配符,可以用 = (等于)运算符取代LIKE用!= 或 <>运算符取代NOT LIKE 谓词

  • 数据库字符为ASCII时一个汉字需要两个_;当字符集为GBK时只需要一个_;

  • 如果要查询的字符本身就含有通配符 % 或 _ ,这时就需要使用ESCAPE '<换码字符>'短语对通配符进行转义

    1.ESCAPE ’ \ ',“ \ ”后面的字符" _ “不具有通配符的含义,转 义为普通的” _ "。如

    WHERE Cname LIKE 'DB\_%I_ _' ESCAPE' \ '

    中匹配串为**‘DB_%I_ _’**第一个_前面有换码字符 \ ,所以它指普通字符,后面两个_的前面没有 \ ,所以仍是通配符。

(5)涉及空值的查询

WHERE grade IS NULL /*分数grade是空值*/
"IS"不能用等号(=)代替

(6)多重条件查询

逻辑运算符 ANDOR 可以用来连接多个查询条件。AND 优先级高于 OR ,可以用括号改变优先级

10.ORDER BY子句
可以对查询结果按照一个或者多个属性列的升序(ASC)或者降序(DESC)排列。

11.GROUP BY 子句
将查询结果按照某一列或多列的值分组,值相等的为一组。如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足制定条件的组,则可以使用HAVING短语(作用于组,注意与WHERE作用于表或试图这一点区别)指定筛选条件

SELECT Sno
FROM SC
GROUP BY sno
HAVING COUNT(*)>3

12.聚集函数

  • COUNT(*)-------------------------------------------------------------------统计元组个数
  • COUNT([DISTINCT|ALL] <列名>)---------------------------统计一列中值的个数
  • SUM([DISTINCT|ALL] <列名>)----------------计算一列值的总和(必须为整型)
  • AVG([DISTINCT|ALL] <列名>)---------------计算一列值的平均值(必须为整形)
  • MAX([DISTINCT|ALL] <列名>)-----------------------------------求一列中的最大值
  • MIN([DISTINCT|ALL] <列名>)------------------------------------求一列中的最小值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值