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的增删改查的更多相关文章

  1. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  2. MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句)一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码)二.SQL语句:    数据定义语言DDL  用来定义数据库.表.列,关 ...

  3. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  4. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  5. Mysql 的 增删改查

    mysql的增删改查 1:新建数据库 create database 数据库名 [其他选项]; 2:新建数据表 create table students ( id int unsigned not ...

  6. MySQL之增删改查之

    MySQL之增删改查   前言:以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. ...

  7. MySql之增删改查 · YbWork's Studio

    前提:在进行"增删改查"的操作之前,先建立一个包含数据表student的数据库(具体操作可以见MySQL之最基本命令): 1."增"--添加数据 1.1 为表中 ...

  8. 使用MySQL练习增删改查时因为版本问题出现连接错误

    使用MySQL练习增删改查时出现连接错误,错误提示如下: 2020-02-19 19:53:51.088 ERROR 16328 --- [reate-249798694] com.alibaba.d ...

  9. koa+mysql实现增删改查-全栈之路(001)

    Date: 2020-4-23 以前很少写文章,从今天开始我要挑战一下自己,连续输出100篇技术类文章.这100篇文章我尽量以实战案例为主. 如果你觉得本文还不错,记得关注或者给个 star,你们的赞 ...

  10. (转)mysql的增删改查

    MySQL数据库的增删改查. 1,首先启动mysql数据库的服务,在运行的窗口中输入:net start mysql,这样,就可 以启动mysql数据库的服务,同理,输入net stop mysql, ...

随机推荐

  1. 【iCore4 双核心板_FPGA】例程一:GPIO输出实验——点亮LED

    实验现象: 三色LED循环点亮. 核心源代码: module led_ctrl( input clk_25m, input rst_n, output fpga_ledr, output fpga_l ...

  2. 【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用

    实验现象: 利用Quartus内部组件生成锁相环,用SignalTap II进行校验. 核心代码: module pll( input clk_25m, output clk_100m, output ...

  3. Ubuntu命令行

    1.打开图形界面的终端 打开:Ctrl+Alt+T 退出:Ctrl+D 2.打开DOS界面的终端 打开:Ctrl+Alt+F1(F1~F6) 退出:Ctrl+Alt+F7 3.用户 ubuntu初始r ...

  4. netbeans rcp中如何编程设置主窗口标题

    http://www.th7.cn/Program/java/201510/606050.shtml ————————————————————————————————————————————————— ...

  5. Java知多少(18)类的定义及其实例化

    类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; v ...

  6. (转) at&T语法格式 与 at&T - intel格式对比

    原地址 示例: movl (%ebp), %eax, 等同于Intel格式中的 ] ,AT&T中,源操作数在左,目的操作数在右.“l”是Longword,相当于Intel格式中的dword p ...

  7. react学习笔记(二)编写第一个react组件

    继续上一节课的内容,打开App.js:会看到如下代码: import React, { Component } from 'react';  //在此文件中引用React,以及reat的组件类 imp ...

  8. linux下WEB服务器安装、配置VSFTP

    转载  http://www.oicto.com/centos-vsftp/?tdsourcetag=s_pcqq_aiomsg linux下WEB服务器安装.配置VSFTP 由 admin · 发布 ...

  9. nginx负载均衡(反向代理)

    6,安装nginx 6.1 依赖库安装  要安装在root根目录里,不要装在虚拟环境里面 yum install gcc-c++ pcre pcre-devel zlib zlib-devel ope ...

  10. js document.activeElement 获得焦点的元素

    <body> <input type="text" id="test" value="ajanuw"> <sc ...