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, ...
随机推荐
- hdoj:2040
#include <iostream> #include <vector> using namespace std; vector<long> yueShu(lon ...
- windows下svn钩子实现每次提交更新至web目录
目的 找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件夹中添加一个post- commit文件:当有commit动作发生时 ...
- Python——特殊属性与方法
Python 对象 中以双下划线开头和结尾的属性称为特殊属性,由于对象的方法也属于属性,因此以双下划线开头和结尾的方法称为特殊方法.对这些对象执行一些特定的运算时,Python会自动视图调用这些实例的 ...
- Springboot学习笔记(五)-条件化注入
前言 将Bean交给spring托管很简单,根据功能在类上添加@Component,@Service,@Controller等等都行,如果是第三方类,也可以通过标有@Configuration的配置类 ...
- intelliJ idea快捷方式
Ctrl+Shift+N,可以快速打开文件 Ctrl+Alt+L,格式化代码 Ctrl+R,替换文本Ctrl+F,查找文本 Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件 Ctrl+ ...
- Java使用SFTP协议上传、下载文件
http://blog.csdn.net/haidage/article/details/6859716 在自己尝试之后发现以上内容里有坑. 1.关闭连接的时候,必须要sftp.getSession( ...
- 【代码审计】XIAOCMS_后台database.php页面存在SQL注入漏洞
0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...
- 解决 Spring Oauth2 RedisTokenStore storeAccessToken 报错 java.lang.NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set
原因是Spring 版本兼容问题 参考: https://blog.csdn.net/smollsnail/article/details/78954225 继承 RedisTokenStore 修改 ...
- 使用iozone测试磁盘性能
IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random w ...
- DDoS(Distributed Denial of Service,分布式拒绝服务)
DDoS:Distributed Denial of Service,即分布式拒绝服务攻击. 借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高 ...