MySQL入门,第七部分,单表查询
首先我们需要了解一下整个数据库的结构
其中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入门,第七部分,单表查询的更多相关文章
- MySQL数据库实验二:单表查询
实验二 单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. ...
- MySql语句常用命令整理---单表查询
初始化t_employee表 创建t_employee表 -- DROP TABLE IF EXISTS test; CREATE TABLE t_employee ( _id INTEGER PRI ...
- MySQL----MySQL数据库入门----第四章 单表查询
select [distinct] * | 字段1,字段2,字段3... from 表名 [where 条件表达式] [group by 字段名] [having 条件表示式] [order by 字 ...
- MySql-第七篇单表查询
1.MySQL中可以使用+.-.*./. 1>但MySQL中没有提供字符串连接运算符,可以使用concat(a_str,'xxx')进行连接. 2>在算术表达式中使用null,将会导致整个 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- mysql 基础入门 单表查询
单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...
- (七)MySQL数据操作DQL:单表查询1
(1)单表查询 1)环境准备 mysql> CREATE TABLE company.employee5( id int primary key AUTO_INCREMENT not null, ...
- 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
一.JavaScript授课视频(适合有JS基础的) 1.IIFE 2.js中的作用域 3.闭包 4.表达式形式函数 5.回调函数和递归 资源地址:链接:https://pan.baidu.com/s ...
- Mysql常用表操作 | 单表查询
160905 常用表操作 1. mysql -u root -p 回车 输入密码 2. 显示数据库列表 show databases 3. 进入某数据库 use database data ...
- python mysql 单表查询 多表查询
一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...
随机推荐
- Spring Boot 结合 Redis 序列化配置的一些问题
前言 最近在学习Spring Boot结合Redis时看了一些网上的教程,发现这些教程要么比较老,要么不知道从哪抄得,运行起来有问题.这里分享一下我最新学到的写法 默认情况下,Spring 为我们提供 ...
- 深度学习与人类语言处理-语音识别(part3)
上节回顾深度学习与人类语言处理-语音识别(part2),这节课我们接着看seq2seq模型怎么做语音识别 上节课我们知道LAS做语音识别需要看完一个完整的序列才能输出,把我们希望语音识别模型可以在听到 ...
- mysql锁机制和事务隔离
mysql事务 1.InnoDB事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. 在数据库提交时,可以确保要么所有修 ...
- pycharm+keras+yolo3的使用和自选模型的训练中遇到的坑
1.TensorFlow版本的问题 报错:RuntimeError: `get_session` is not available when using TensorFlow 2.0. 解决办法:这个 ...
- 【盘它!】那些让效率MAX的工具和方法(Mac篇)
一.前言 人类之所以伟大,是因为会创造并使用工具! 工欲善其事必先利器.高效的工具和方法不仅能最大化 节省我们的时间,还可以一定程度上让我们 保持专注,以达到 事半功倍 的效果. 但仅仅有工具不会使用 ...
- 面试话痨(二)C:JAVA String,别以为你穿个马甲我就不认识你了
面试话痨系列是从技术广度的角度去回答面试官提的问题,适合萌新观看! 面试官,别再问我火箭怎么造了,我知道螺丝的四种拧法,你想听吗? String相关的题目,是面试中经常考察的点,当面试中遇到了St ...
- 【python 数据结构】相同某个字段值的所有数据(整理成数组包字典的形式)
class MonitoredKeywordMore(APIView): def post(self, request): try: # 设置原生命令并且请求数据 parents_asin = str ...
- 【docker Elasticsearch】Rest风格的分布式开源搜索和分析引擎Elasticsearch初体验
概述: Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎. 它能从项目一开始就赋予你的数据以搜索.分析和探索的能力,这是通常没有预料到的. 它存在还因为原始数据如果只是躺在磁 ...
- xpath模块使用
xpath模块使用 一.什么是xml(百度百科解释如下) 可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 在电子计算机中,标记指计算机所能理解的信 ...
- Chrome EC框架探索_0.0_引言
0.0 引言 嵌入式硬件抽象框架常常面临着这样的尴尬:封装层次较高的(arduino,mbed)不能充分暴露必要的API并面临着性能问题,封装层次较低的(HAL,LL)接口复杂且开发困难.近日发现的一 ...