数据库的创建,插入,查询,平均数,连接查询,嵌套查询,组合查询等

创建表:
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 的名称也都将从结果中消除。这是因为用反向通配符匹配字符串是分步骤进行计算的,一次一个通配符。如果在计算过程中任一环节匹配失败,那么就会将其消除。

原文地址:https://www.cnblogs.com/quitpoison/p/10795520.html

时间: 2024-10-05 20:03:50

数据库的创建,插入,查询,平均数,连接查询,嵌套查询,组合查询等的相关文章

数据库9:联结表 高级联结 组合查询 全文本搜索

第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分.   外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息 联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行.   创建联结          

SQL必知必会 笔记 第十四章 组合查询

14.1组合查询 多数SQL查询都只包含从一个或多个表中返回单条SELECT语句.但是,SQL与允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(union)或符合查询(compound query). 有两种基本情况,其中需要使用组合查询. (1)在单个查询中从不同的表类似返回结构数据. (2)对单个表执行多个查询,按单个查询返回数据. 14.2创建组合查询 可用UNION操作符来组合数条SQL查询.利用UNION,可给出多条SELECT语句,将

MySQL必知应会-第17章-组合查询

第17章-组合查询 本章讲述如何利用UNION操作符将多条SELECT语句组合成一个结果集. 17.1 组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句. MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并( union) 或复合查询(compound query).有两种基本情况,其中需要使用组合查询:? 在单个查询中从不同的表返回类似结构的数据:? 对单个表执行多个查询,按单个查询返回数据. 组合查询和多

第十七章 组合查询

学习目标: 如何利用UNION操作符将多条SELECT语句组合成一个结果集. 组合查询: 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语 句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个 查询结果集返回.这些组合查询通常称为并(union)或复合查询 (compound query). 有两种基本情况,需要使用组合查询: 在单个查询中从不同的表返回类似结构的数据: 对单个表执行多个查询,按单个查询返回数据. 组合查询和多个WHERE条件: 多数情况下

重构之路 组合查询之传参+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量,传到D层然后与select子句组成完整的sql语句,之后执行,返回查询结果,就是这么简单,但是博文的结尾也留下了一个疑问,这种方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的,这次我们一起来看看我实现的另一种方法.首先给大家简单介绍一下这种方法的思路,其实也比较简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体参数(现在实体层定

重构之路 组合查询之传參+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量.传到D层然后与select子句组成完整的sql语句.之后运行.返回查询结果,就是这么简单.可是博文的结尾也留下了一个疑问,这样的方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的.这次我们一起来看看我实现的还有一种方法.首先给大家简介一下这样的方法的思路,事实上也比較简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体參数(如今实体

SQL学习之组合查询(UNION)

1.大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回.这些组合查询通常称为并或复合查询. 主要有两种情况需要使用组合查询: (1)在一个查询中从不同的表返回结构数据 (2)对一个执行多个查询,按一个查询返回数据 2.使用UNION 使用UNION很简单,所要做的只是给出每条SELECT语句,然后再每条SELECT语句之间加上UNION关键字,这样所给出的SELECT结果集就能组合成一个结

mysql分表后组合查询

<?php //注册到月份表 $sql = "INSERT INTO tbl_view_".date('Ym')."(ip,city,dateline) VALUES('127.0.0.1','CHINA',1562065253)"; $id = DB::query($sql); //查询的时候按时间条件组合查询SQL $start_date = strtotime('2019-01-01 00:00:00'); $end_date = strtotime('

【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过测试校验] 一.去重复(DISTINCT) 二.组合查询 三.UNION(并集) 四.连接查询 五.虚拟表 一.去重复(DISTINCT) DISTINCT:用于返回唯一不同的值,主要是用于某一字段 语法 SELECT DISTINCT <列名>|* FROM <表名> 示例 -- 查