单表查询

单表查询

对于SQL语句,SELECT 和 FROM 子句是必须的,其他是可选的,其基本语法为:

SELECT A1,A2....,An
FROM R1,R2,...,Rn
WHERE P

SELECT子句:用于指定查询结果中需要的属性或表达式。
FROM子句:用来给出查询所涉及的表,表可以是基本表,视图或查询表。
WHERE子句:用来指定查询结果元组所需要满足的条件。

- 查询指定列

SELECT studentNo,studentNname FROM student 

- 查询所有列

SELECT * FROM student 

- 消除重复元组

SQL查询默认不消除重复元组,需要消除重复元组,可以使用关键字 DISTINCT

查询学生中存在的所有民族。

/*
不消除重复元组查询 
查询出来的学生民族将存在重复的现象
*/
SELECT nation FROM student 
/* 消除重复元组 */
SELECT DISTINCT nation FROM student

- 条件查询

WHERE子句可以实现关系代数中的选择运算,用于查询满足选择条件的元组。
WHERE子句中常用的查询条件运算符如下:

  • 比较运算:>,>=,<,<=,=,<>(或!=);
  • 范围查询:BETWEEN···AND;
  • 集合查询:IN;
  • 空值查询 :IS null;
  • 字符匹配查询:LIKE;
  • 逻辑查询:AND,OR,NOT;
比较运算:

查询所有汉族学生的学号,姓名:

SELECT studentNo,studentNname FROM student 
WHERE nation = '汉族' 
范围查询:BETWEEN···AND

BETWEEN … AND 用于查询介于两个值之间的数据范围的元组,NOT BETWEEN … AND用于查询不在两个值之间的数据范围的元组。这些值可以是数值、文本或者日期。

查询年龄18~20岁之间学生的学号,姓名

SELECT studentNo,studentNname 
FROM student 
WHERE age BETWEEN 18 AND 20 //查询不在范围之中,使用 NOT BETWEEN 18 AND 20
集合查询:IN

IN用于查询属性值在某个集合中的元组,NOT IN用于查询属性值在某个集合中的元组。

查询 汉族,藏族或回族学生的学号,姓名

SELECT studentNo,studentNname 
FROM student
WHERE nation IN('汉族','藏族','回族') 
空值查询 :IS null

IS null 可用于查询属性值为空值,这里IS 不能用 “=” 代替。

查询民族为空值的学生信息

SELECT *
FROM student
WHERE nation IS null 
字符匹配查询:LIKE

LIKE 可用于字符匹配查询。LIKE 的语法格式为:
[NOT] LIKE <匹配字符串> [ESCAPE<换码字符>]
查询的含义:LIKE 前没有NOT ,则查询指定的属性列值于<匹配字符串>相匹配的元组,有NOT则是不匹配。<匹配字符串>可以是一个具体的字符串,也可以是字符串加通配符%和 _ 。其中:
通配符“%”表示任意长度的字符串,如“%华”,表示以“华”结尾的任意字符串,“刘%华”,表示以“刘”开头,“华”结尾的任意字符串。
通配符“ _ ”表示任意一个字符,如“刘德 _ ,表示以“刘德”开头的任意3个字符的字符串,如“ _ _刘德华”表示以“刘德华”结尾的任意5个字符的字符串。

/*查询所有姓刘的同学的学生信息*/
SELECT *
FROM student
WHERE studentName LIKE '刘%' 
/*查询所有姓王且名字为3个字的同学的学生信息*/
SELECT *
FROM student
WHERE studentName LIKE '王 _ _'
/*查询所有姓名中不含有“杰”的同学的学生信息*/
SELECT *
FROM student
WHERE studentName NOT LIKE '%杰%'
/*在班级Class表中查询班级名称中含有“16_”符号的班级名称*/
SELECT className
FROM Class
WHERE className  LIKE '%16\_%' ESCAPE '\'

ESCAPE ‘’ 表示\为换码字符,这样紧跟在符号\后面的_不是通配符,而是普通的查询符号。

逻辑查询:AND,OR,NOT

使用AND、OR、NOT 分别实现逻辑与,逻辑或,逻辑非。

查询民族为汉族,性别为女并且年龄小于20岁的学生信息

SELECT *
FROM student
WHERE nation = '汉族' AND sex = '女' AND age<20

查询民族为汉族或藏族的学生信息

SELECT *
FROM student
WHERE nation = '汉族' or nation = '藏族'

排序运算

SQL排序运算是通过使用ORDER BY 子句实现,其语法为:
ORDER BY <表达式1> [ASC|DESC] [,<表达式2>[ASC|DESC]···]
其中:<表达式>可以是属性、函数或表达式,默认按升序(ASC)排序,要按降序排序必须指明DESC选项。在查询结果中首先按<表达式1>的值排序,在<表达式1>相同时,再按<表达式2>排序,以此类推。

查询籍贯不是“汉族”的同学信息,并按籍贯降序,学号升序排序输出。

SELECT *
FROM student
WHERE nation != '汉族'
ORDER BY nation DESC,studentNo

聚合查询

SQL查询提供的集合函数主要包括以下几个:

  • count( [DISTINCT|ALL] { * |<列名> } ):统计关系的元组个数或一列中值的个数
  • sum( [DISTINCT|ALL] { <列名> } ):统计一列中值的总和(此列必须是数值型)
  • avg( [DISTINCT|ALL] { <列名>}):统计一列中值的平均值(此列必须是数值型)
  • max( [DISTINCT|ALL] { <列名> } ):统计一列中值的最大值
  • min( [DISTINCT|ALL] { <列名> } ):统计一列中值的最小值
    如果指定DISTINCT谓词,表示消除<列名>中的重复元组,然后再统计;如果指定ALL或没有DISTINCT谓词,则不消除。
查询学生总人数
SELECT count(*) FROM student
查询所有学生的民族个数
SELECT count(DISTINCT nation) FROM student
WHERE nation = '汉族'
查询学生中的平均年龄
SELECT avg(age) FROM student

分组聚合

SQL语句中通过GROUP BY 和HAVING 子句实现分组运算,其中:
GROUP BY 子句对查询结果按每一列或某几列进行分组,值相等的分为一组;
HAVING 子句对分组的结果进行选择,仅输出满足条件的组,必须的GROUP BY子句配合使用。

查询民族人数在50以上的每个同学的民族,性别,年龄

SELECT nation, sex ,age
FROM student
GROUD BY nation
HAVING count(nation)>=50

WHERE和HAVING的区别
WHERE是先在数据库中筛选了再通过SELECT查询数据,而HAVING是SELECT查询完数据过后,通过HAVING筛选后输出数据。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值