mysql的增删改查
1.启动 Navicat for MySQL, 在 MySQL – 新建连接中完成连接参数配置。
2.登录到本地数据库服务器后, 连接到 test 数据库上。
3.用 Create Table 建立 Student 表,表结构如下所示:
| 属性名 | 类型 | 长度 |
| SNO | Varchar | 20 |
| Name | Varchar | 10 |
| Age | Integer | |
| College | Varchar | 30 |
4.用 Create Table 建立 Course 表,表结构如下所示:
| 字段名 | 类型 | 长度 |
| CourseID | Varchar | 15 |
| CourseName | Varchar | 30 |
| CourseBeforeID | Varchar | 15 |
5.用 Create Table 建立 Choose 表,表结构如下所示:
| 字段名 | 类型 | 长度 |
| SNO | Varchar | 20 |
| CourseID | Varchar | 30 |
| Score | DECIMAL | 5,2 |
6.用 INSERT 语句向 Student 表中插入 3 个元组:
注意:每条元组一个完整的 INSERT 语句, 3 个元组需要写 3 个 INSERT 语句。
| SNO | Name | Age | College |
| S00001 | 张三 | 20 | 计算机学院 |
| S00002 | 李四 | 19 | 通信学院 |
| S00003 | 王五 | 21 | 计算机学院 |
7.用 INSERT 语句向 Course 表中插入 3 个元组:
注意:每条元组一个完整的 INSERT 语句, 3 个元组需要写 3 个 INSERT 语句。
| CourseID | CourseName | CourseBeforeID |
| C1 | 计算机引论 | 空值(NULL) |
| C2 | C 语言 | C1 |
| C3 | 数据结构 | C2 |
8.用 INSERT 语句向 Choose 表中插入 7 个元组:
注意:每条元组一个完整的 INSERT 语句, 7 个元组需要写 7 个 INSERT 语句。
| SNO | CourseID | Score |
| S00001 | C1 | 95 |
| S00001 | C2 | 80 |
| S00001 | C3 | 84 |
| S00002 | C1 | 80 |
| S00002 | C2 | 85 |
| S00003 | C1 | 78 |
| S00003 | C3 | 70 |
9.用 SELECT 语句,查询计算机学院学生的学号和姓名。
10.用 SELECT 语句的 between…and…表示查询条件, 查询年龄在 20~23 岁的学
生信息。
11.用 SELECT 语句的 COUNT()聚集函数,统计 Student 表中学生总人数。
12.分别用 SELECT 语句的 max()、min()、sum()、avg()四个聚集函数,计算 Choose
表中 C1 课程的最高分、最低分、总分、平均分。
13.用 SELECT 语句对空值(NULL)的判断条件,查询 Course 表中先修课称编号为
空值的课程编号和课程名称。
14.用 SELECT 语句的连接查询,查询学生的学号、姓名、选修的课程名及成绩。
15.用 SELECT 的存在量词 EXISTS, 查询与“张三” 在同一个学院学习的学生信
息。
16.用 SELECT 语句的嵌套查询,查询选修 C1 课程的成绩低于“张三” 的学生的
学号和成绩。
17.用 SELECT 语句的组合查询(UNION),查询选修了 C1 课程或者选修了 C3 课程
的学生学号。
18.用 SELECT 语句的组合查询(UNION)与 DISTINCT 短语,查询选修了 C1 课程或
者选修了 C3 课程的学生学号,并取消重复的数据。
以上 SQL 语句请保存,以备老师检查和写实验报告之用。
七、思考与练习
1、 Where 与 Having 语句有何差别?
2、 Count(*)与 Count(字段名)有何差别?
3、 LIKE ‘[^s][^y][^s]%’ 与 NOT LIKE ‘sys%’ 有无区别?请加以验证?
4、 全连接、左连接、右连接有什么不同?
5、 IN 与 Exists 语句有何区别?
6、 不相关子查询、相关子查询有何区别?
7、 UNION 与 UNION ALL 有何差别,谁的性能高?
下面是答案
创建表:
CREATE TABLE Student(
SNO VARCHAR(20),
Name VARCHAR(10),
Age INTEGER,
College VARCHAR(30)
);
CREATE TABLE Course(
CourseID VARCHAR(15),
CourseName VARCHAR(30),
CourseBeforeID VARCHAR(15)
);
CREATE TABLE Choose(
SNO VARCHAR(20),
CourseID VARCHAR(30),
Score DECIMAL(5,2)
);
表中插入数据:
INSERT INTO student(SNO,Name,Age,College)
VALUES('S00001','张三',20,'计算机学院');
INSERT INTO course
VALUES('C1','计算机引论','');
INSERT INTO course
VALUES('c2','C语言','C1');
INSERT INTO course
VALUES('c3','数据结构','C2');
INSERT INTO choose
VALUES('S00001','C1',95);
INSERT INTO choose
VALUES('S00001','C2',80);
INSERT INTO choose
VALUES('S00001','C3',84);
INSERT INTO choose
VALUES('S00002','C1',80);
INSERT INTO choose
VALUES('S00002','C2',85);
INSERT INTO choose
VALUES('S00003','C1',78);
INSERT INTO choose
VALUES('S00003','C3',70);
查询数据:
SELECT SNO, Name from student WHERE College='计算机学院';
betwwwn and
SELECT Name,Age FROM student WHERE Age BETWEEN 20 AND 30;
count
SELECT COUNT(*) FROM student;
MAX
SELECT MAX(Score) from choose;
MIN
SELECT MIN(Score) from choose;
SUM
SELECT SUM(Score) from choose;
AVG 平均数
SELECT AVG(Score) from choose;
IS NULL
SELECT CourseID,CourseName FROM course WHERE CourseBeforeID IS NULL;
连接查询
SELECT CourseID,Name,College,Score FROM student left join choose ON student.SNO=choose.SNO;
exists
select * from student a where exists ( select 1 from student b where b.`name`='张三'and b.college=a.college)
嵌套查询
select SNO,Score from choose WHERE CourseID='C1' and Score<any(
SELECT Score FROM student,choose WHERE student.SNO =choose.SNO and CourseID ='C1' and `Name`='张三'
)
组合查询
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。(UNION ALL 不消除重复行)
select SNO from choose WHERE CourseID='C1' UNION SELECT SNO FROM choose WHERE CourseID='C3';
UNION 和 DISTINCT
select DISTINCT SNO from choose WHERE CourseID='C1' UNION SELECT DISTINCT SNO FROM choose WHERE CourseID='C3';
SELECT DISTINCT SNO FROM student WHERE SNO in(SELECT SNO from choose WHERE CourseID='C1') UNION SELECT DISTINCT SNO FROM student WHERE SNO in (SELECT SNO FROM choose WHERE CourseID='C3');
where与having 的区别
作用相同,区别在俞having关键字可以跟聚合函数,而where关键字不能,通常与group by一起使用,区别对分组后的结果进行过滤
count(字段名)和count(*)有什么区别
一般没什么区别,但count(字段名)比count(*)效率更高
LIKE ‘[^s][^y][^s]%’ 与 NOT LIKE ‘sys%’ 有无区别?请加以验证?
IN 与 Exists 语句有何区别?
区别及应用场景
in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。
not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
非相关子查询和相关子查询区别?
非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)
UNION 与 UNION ALL 有何差别,谁的性能高?
union会去除两个结果集相同的值,而union all不会。
因为union all没有去掉重复值的额外开销,所以通常效率更高。
全连接、左连接、右连接有什么不同?
交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
LIKE ‘[^s][^y][^s]%’ 与 NOT LIKE ‘sys%’ 有无区别?请加以验证?
若要查阅非系统表的所有对象,请使用 NOT LIKE 'sys%'。如果共有 32 个对象且 LIKE 找到 13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象。
使用 LIKE '[^s][^y][^s]%' 模式不一定每次找到的名称都相同。可能仅得到 14 个名称(而不是 19 个),除了系统表名称外,所有以 s 开始或第二个字母为 y 或第三个字母为 s 的名称也都将从结果中消除。这是因为用反向通配符匹配字符串是分步骤进行计算的,一次一个通配符。如果在计算过程中任一环节匹配失败,那么就会将其消除。
mysql的增删改查的更多相关文章
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- MySQL数据库(增删改查语句)
MySQL数据库(增删改查语句)一.登录数据库:----> mysql -uroot -proot;(对应用户名和密码)二.SQL语句: 数据定义语言DDL 用来定义数据库.表.列,关 ...
- python操作mysql数据库增删改查的dbutils实例
python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...
- Asp.Net操作MySql数据库增删改查
Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git 1.安装MySQL数据库 ...
- Mysql 的 增删改查
mysql的增删改查 1:新建数据库 create database 数据库名 [其他选项]; 2:新建数据表 create table students ( id int unsigned not ...
- MySQL之增删改查之
MySQL之增删改查 前言:以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. ...
- MySql之增删改查 · YbWork's Studio
前提:在进行"增删改查"的操作之前,先建立一个包含数据表student的数据库(具体操作可以见MySQL之最基本命令): 1."增"--添加数据 1.1 为表中 ...
- 使用MySQL练习增删改查时因为版本问题出现连接错误
使用MySQL练习增删改查时出现连接错误,错误提示如下: 2020-02-19 19:53:51.088 ERROR 16328 --- [reate-249798694] com.alibaba.d ...
- koa+mysql实现增删改查-全栈之路(001)
Date: 2020-4-23 以前很少写文章,从今天开始我要挑战一下自己,连续输出100篇技术类文章.这100篇文章我尽量以实战案例为主. 如果你觉得本文还不错,记得关注或者给个 star,你们的赞 ...
- (转)mysql的增删改查
MySQL数据库的增删改查. 1,首先启动mysql数据库的服务,在运行的窗口中输入:net start mysql,这样,就可 以启动mysql数据库的服务,同理,输入net stop mysql, ...
随机推荐
- [转]MySql 5.7关键字和保留字-附表
原文地址:https://www.cnblogs.com/Z-Fanghan/p/6892944.html 现在使用navicat图形界面或者Hibernate做映射生成表的时候,渐渐的会忽视掉关键字 ...
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
实验原理: 按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻. 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当按 ...
- HyperLogLog
数据量一大,连统计基数也成了一个麻烦事.在使用kylin的时候,遇到对度量值进行基数统计,使用的是Hyperloglog算法,占用内存小,误差小,实乃不错的方法,但查阅网上的资料与内容,感觉未能理解的 ...
- 避免在构造函数中调用虚方法(Do not call overridable methods in constructors)
CLR中说道,不要在构造函数中调用虚方法,原因是假如被实例化的类型重写了虚方法,就会执行派生类型对虚方法的实现.但在这个时候,尚未完成对继承层次结构中所有字段的初始化.所以,调用虚方法会导致不可预测的 ...
- 设计模式-结构型模式, mvc 模型视图控制器模式(8)
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...
- vue图片放大镜效果
原作者地址:https://github.com/lemontree2000/vue-magnify 经测试,原插件在使用时有bug,即在预览时进行鼠标滚动,导致遮罩层计算错误.我已修复该bug,特分 ...
- c++中SetEvent和ResetEvent的使用
关于事件 事件(Event)是WIN32提供的最灵活的线程间同步方式,事件可以处于激发状态(signaled or true)或未激发状态(unsignal or false).根据状态变迁方式的不同 ...
- C#自定义按钮、自定义WinForm无边框窗体、自定义MessageBox窗体
C#自定义按钮.自定义WinForm无边框窗体.自定义MessageBox窗体 C#自定义Button按钮控件 效果展示 C#自定义Winform无边框窗体 效果展示 C#自定义无边框MessageB ...
- nginx的80端口跳转到443
然后在80端口设置http跳转到https 在80端口location中加入rewrite ^(.*)$ https://$host$1 permanent; 如图,然后输入命令service ngi ...
- IDEA导入springboot项目不能启动
由于工具没有识别到项目的pom.xml文件,所以需要在右侧的Maven栏目中点击 + 号,选中项目的pom.xml文件,则导入成功.