首先我们需要了解一下整个数据库的结构

其中Student表中Sno为主键、Study表中Sno和Cno合起来做主键、Course表中Cno为主键

其创建脚本如下:

#------------------------------创建数据库及写入数据------------------------------

CREATE DATABASE SCDB;

#--创建学生选课数据库
USE SCDB; #--创建学生表Student
CREATE TABLE Student
(
Sno CHAR(10) NOT NULL PRIMARY KEY,
Sname CHAR(10) NULL,
Age INT NULL,
Sex CHAR(1),
Place CHAR(10)
)ENGINE=INNODB DEFAULT CHARSET=utf8; #--查看表Student详细定义
SHOW CREATE TABLE Student; #--给学生表Student插入数据
INSERT INTO Student(Sno,Sname,Age,Sex,Place)
VALUES('02001','王明',21,'男','广东'),
('02005','黄小英',22,'女','湖北'),
('03035','张小倩',20,'女','江西'),
('03061','李刚',21,'男','湖北'),
('04009','张珊',18,'女','浙江'),
('04027','肖文',19,'男','福建'); #--创建课程表Course
CREATE TABLE Course
(
Cno CHAR(10) NOT NULL PRIMARY KEY,
Cname CHAR(10) NULL,
Credit INT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8; #--给课程表Course插入数据
INSERT INTO Course
VALUES('C01','操作系统',3),
('C02','C语言',4),
('C03','数据结构',3),
('C04','数据库原理',2),
('C05','软件工程',2); #--创建选修表Study
CREATE TABLE Study
(
Sno NCHAR(10) NOT NULL REFERENCES Student(Sno),
Cno NCHAR(10) NOT NULL REFERENCES Course(Cno),
Grade INT NULL,
PRIMARY KEY (Sno,Cno)
)ENGINE=INNODB DEFAULT CHARSET=utf8; #--给选修表Study插入数据
INSERT INTO Study(Sno,Cno,Grade)
VALUES('02001','C01',86),
('02001','C05',78),
('02005','C01',81),
('02005','C03',66),
('03035','C02',78),
('03035','C04',92),
('03061','C04',52),
('03061','C01',84),
('04009','C02',78),
('04009','C03',82),
('04027','C01',80);
#-----------------------------------------------------------------------------

一、单表简单查询

1.简单属性投影

查询student表中的姓名、年龄、籍贯

π sno, sname, age  (Student)
select sname, age, place
from student;

2.投影全部数据

显示course表中的所有数据

select *
from course;

3.投影时为属性设置别名

查询student表,并且为sname和age设置别名

select sname 姓名, age as 年龄
from student; 注意:
as 可有可无,但是为了脚本的可读性,建议写上

4.投影时进行简单四则运算

显示student表中的学生的出生年份

select 2020 - age as 出生年份
from student; select year(CURRENT_DATE - age) as 出生年份
from student; 注意:
语句中可以包含带有+、-、×、/的算术运算表达式,其运算对象为常量或元组的属性

5.对查询结果进行消重

查询课表中的学分列

select distinct Credit as 学分
from course; 注意:
distinct 关键字用来消重

6.使用聚合函数(集函数)

查询所有学生的平均分

select avg(Grade)
from study;
COUNT(*)		统计查询结果中的元组个数
COUNT(<列名>) 统计查询结果中一个列上值的个数
MAX(<列名>) 计算查询结果中一个列上的最大值
MIN(<列名>) 计算查询结果中一个列上的最小值
SUM(<列名>) 计算查询结果中一个数值列上的总和
AVG(<列名>) 计算查询结果中一个数值列上的平均值 注意:
除COUNT(*)外,其他集函数都会先去掉空值再计算
DISTINCT保留字,会将查询结果的列去掉重复值再计算

二、单表条件查询

1.投影满足某一条件的元组(元组属性)

查询籍贯为湖北的学生姓名

select sname
from student
where Place = '湖北';

查询籍贯不是湖北的学生的姓名

select sname
from student
where not Place = '广东';

2.投影满足多个条件的元组(元组属性)

运算符号

含    义

         NOT  

IN

NOT IN

判断属性值是否在一个集合内

BETWEEN…AND…

NOT BETWEEN…AND…

判断属性值是否在某个范围内

IS NULL

IS NOT NULL

判断属性值是否为空

LIKE

NOT LIKE

判断字符串是否匹配

查询大于20岁的女生

select sname
from student
where age >= 20 and Sex = '女';

查询广东或江西籍贯的学生姓名

select sname
from student
where Place = '广东' or Place = '江西'; 或 select sname
from student
where Place in ('广东', '江西');

查询66和88之间的成绩

select grade
from study
where Grade between 66 and 78;

3.通配符的使用

符号 含义
% 匹配任意子串
_(下划线) 匹配任意一个字符
\ 转义(特殊字符)
'(单引号) 转义(')
/ 转义(%   _)

查询姓王的学生

select sname
from student
where sname like '王%';

4.正则表达式

模式

描述

举例

^

匹配输入字符串的开始位置

 

$

匹配输入字符串的结束位置

 

.

匹配除 "\n" 之外的任何单个字符

 

[...]

字符集合。匹配所包含的任意一个字符

'[abc]' 可以匹配 "plain" 中的 'a'

[^...]

负值字符集合。匹配未包含的任意字符

 '[^abc]' 可以匹配 "plain" 中的'p'

p1|p2|p3

匹配 p1 或 p2 或 p3

'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"

*

匹配前面的子表达式零次或多次

zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}

+

匹配前面的子表达式一次或多次

'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}

{n}

n 是一个非负整数。匹配确定的 n 次

'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次

 

查询姓王的学生

select sname
from student
where sname regexp '^王'; 注意:
配合正则表达式查询时,前面必须有关键字 regexp

5.日期和时间的比较

日期格式:DATE'XX-XX-XX'

例如:DATE ’1945-10-01’

时间格式:TIME'XX:XX:XX'

例如:TIME ’15:00:00’

日期与时间的比较根据 '早与晚' 判定

6.排序

ORDER   BY   <属性表>   [ASC | DESC]

ASC ===> 升序

DESC ===> 降序

select sno, grade
from study
where grade >= 60
order by grade desc

7.分组查询

GROUP   BY   <属性>

分组查询把一个表按某一指定列(或一些列)上的值相等的原则分组;一般和聚合函数一起使用,当使用该子句后,所有的聚合函数都将是对每一个组进行运算

例如:

将成绩按班级分类,并且把每个班级的平均分显示出来

select cno, avg(grade)
from study
group by cno

8.分组条件查询

HAVING   ?

按分组的结果筛选满足条件的分组时,需要使用 HAVING 关键字而不是 WHERE 关键字

例如:

将班级平局分大于75分的班级显示出来

select cno, avg(grade)
from study
group by cno
having avg(grade) > 75

9.其他查询

查询籍贯相同的学生的信息

SELECT a.sname AS 同籍贯学生
FROM student as a, student as b
WHERE a.place = b.place AND a.sno<>b.sno

MySQL入门,第七部分,单表查询的更多相关文章

  1. MySQL数据库实验二:单表查询

    实验二   单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. ...

  2. MySql语句常用命令整理---单表查询

    初始化t_employee表 创建t_employee表 -- DROP TABLE IF EXISTS test; CREATE TABLE t_employee ( _id INTEGER PRI ...

  3. MySQL----MySQL数据库入门----第四章 单表查询

    select [distinct] * | 字段1,字段2,字段3... from 表名 [where 条件表达式] [group by 字段名] [having 条件表示式] [order by 字 ...

  4. MySql-第七篇单表查询

    1.MySQL中可以使用+.-.*./. 1>但MySQL中没有提供字符串连接运算符,可以使用concat(a_str,'xxx')进行连接. 2>在算术表达式中使用null,将会导致整个 ...

  5. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  6. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  7. (七)MySQL数据操作DQL:单表查询1

    (1)单表查询 1)环境准备 mysql> CREATE TABLE company.employee5( id int primary key AUTO_INCREMENT not null, ...

  8. 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】

    一.JavaScript授课视频(适合有JS基础的) 1.IIFE 2.js中的作用域 3.闭包 4.表达式形式函数 5.回调函数和递归 资源地址:链接:https://pan.baidu.com/s ...

  9. Mysql常用表操作 | 单表查询

    160905 常用表操作 1. mysql -u root -p 回车 输入密码   2. 显示数据库列表 show databases     3. 进入某数据库 use database data ...

  10. python mysql 单表查询 多表查询

    一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...

随机推荐

  1. git回滚到任意一个版本

    1.首先查找提交的记录(-3表示显示最近的3条) git log -3 2.强制回滚到制定版本 git reset --hard 制定版本commitId 如:git reset --hard 4ba ...

  2. 如何快速高效率地学习Go语言

    要想快速高效率地掌握Go语言,关键是要通过不断写代码去训练,熟能生巧.方法是没问题的,但具体的路径呢?就像开车,能不能给个导航?我希望这篇文章能起到一个导航的作用,这里提供的路径,应该对很多人都适合. ...

  3. 关于LaTex的安装

    第一次写博客,有点生疏,但是想把具体安装的流程自我的汇总一下,毕竟我总是忘记,万一下一次要用的时候又要弄很久,就当经验吧. 其实是因为这个新型冠状病毒不能出门,也没开学,想找点事情做一做 这个博客不知 ...

  4. Python基础篇(五)_文件和数据格式化

    Python基础篇_文件和数据格式化 文件的使用:文件打开.关闭.读写 文件打开:通过open()函数打开文件,并返回一个操作文件的变量. 使用语法:<变量名> = (<文件路径以及 ...

  5. 【MyBatis笔记】mapper文件的配置以及说明

    <!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...

  6. Python实现一个ORM模型类

    ORM是三个单词首字母组合而成,包含了Object(对象-类),Relations(关系),Mapping(映射).解释过字面意思,但ORM的概念仍然模糊.私以为要理解一个事物,最好的法子是搞明白它出 ...

  7. selenium3浏览器驱动设置

    设置浏览器驱动: 1.首先手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver.geckodriver)丢到该目录下. 2.打开计算机 ...

  8. RTSP协议进行视频取流的方法、注意点及python实现

    在视频应用中,我们一般都需要基于摄像头或录像机的视频流进行二次开发,那么就涉及到如何将视频流取出来. 在摄像机安装好之后,一般是通过局域网与本地的服务器进行连接,要取录像机的视频流就要在局域网范围内进 ...

  9. upload-labs通关集

    upload-labs通关集 环境 第一题 前端js检查 第二题 content-type类型绕过 第三题 黑名单绕过 第四题 .htaccess绕过 第五题 大小写绕过 第六题 空格绕过 第七题 点 ...

  10. TensorFlow Windows 安装

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 本系列教程将手把手带您从零开始学习Tensorflow,并最终通过 ...