zoukankan      html  css  js  c++  java
  • 数据库的创建,插入,查询,平均数,连接查询,嵌套查询,组合查询等

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

  • 相关阅读:
    中文分词学习整理
    机器学习
    TimSort学习资料
    小段子
    Load和CPU利用率是如何算出来的
    sql server xml 截断
    System.Security.Cryptography.CryptographicException: 系统找不到指定的文件
    优化笔记: jxrsfxrxx_D_20140916.gz
    优化笔记: 此两个产品每天8点30分开始,要跑一个小时,看看是否有提升空间
    优化笔记:pfyhparopenfundinfotest_D_20140916.gz
  • 原文地址:https://www.cnblogs.com/quitpoison/p/10795520.html
Copyright © 2011-2022 走看看