精华内容
下载资源
问答
  • 1. 数据库、表的创建以及数据的插入 (1).建立数据库jxgl; 源代码: CREATE DATABASE jxgl; 实验结果如下: (2).创建Student表; 源代码: CREATE TABLE Student( Sno CHAR(5) NOT NULL PRIMARY KEY(Sno), Sname ...

    1. 数据库、表的创建以及数据的插入
    (1).建立数据库jxgl;
    源代码:

    CREATE DATABASE jxgl;
    

    实验结果如下:
    在这里插入图片描述

    (2).创建Student表;
    源代码:

    CREATE TABLE Student(
    	Sno CHAR(5) NOT NULL PRIMARY KEY(Sno),
    	Sname VARCHAR(20),
    	Sage SMALLINT CHECK(Sage > = 15 AND Sage < = 45),
    	Ssex CHAR(2) DEFAULT '男' CHECK(Ssex = '男' OR Ssex = '女'),
    	Sdept CHAR(2)
    );
    

    实验结果如下:
    在这里插入图片描述

    (3).创建Course表;
    源代码:

    CREATE TABLE Course(
    	Cno CHAR(2) NOT NULL PRIMARY KEY(Cno),
    	Cname VARCHAR(20),
    	Cpno CHAR(2),
    	Ccredit SMALLINT
    );
    

    实验结果如下:

    (4).创建SC表;

    CREATE TABLE SC(
    	Sno CHAR(5) NOT NULL CONSTRAINT S_F FOREIGN KEY REFERENCES Student(Sno),
    	Cno CHAR(2) NOT NULL,
    	Grade SMALLINT CHECK((Grade IS NULL) OR (Grade BETWEEN 0 AND 100)),
    	PRIMARY KEY(Sno, Cno),
    	FOREIGN KEY(Cno) REFERENCES Course(Cno)
    );
    

    实验结果如下:
    在这里插入图片描述

    (5).Student表信息插入

    INSERT INTO Student 
    VALUES('98001','钱横',18,'男','CS'),
    ('98002','王林',19,'女','CS'),
    ('98003','李民',20,'男','IS'),
    ('98004','赵三',16,'女','MA');
    

    实验结果如下:
    在这里插入图片描述

    (6).Course表信息插入

    INSERT INTO Course 
    VALUES('1','数据库系统','5',4),
    ('2','数学分析',null,2),
    ('3','信息系统导论','1',3),
    ('4','操作系统_原理','6',3),
    ('5','数据结构','7',4),
    ('6','数据处理基础',null,4),
    ('7','C语言','6',3);
    

    实验结果如下:
    在这里插入图片描述

    (7).SC表信息插入

    INSERT INTO SC 
    VALUES('98001','1',87),
    ('98001','2',67),
    ('98001','3',90),
    ('98002','2',95),
    ('98002','3',88);
    

    实验结果如下:
    在这里插入图片描述

    2. 基于“教学管理”数据库jxgl,试用SQL的查询语句表达下列查询
    (1).检索年龄大于23岁的男学生的学号和姓名;
    源代码:

    SELECT Sno, Sname
    FROM Student
    WHERE Sage > 23 AND Ssex = '男';
    

    实验结果如下:
    在这里插入图片描述

    (2).检索至少选修一门课程的女学生姓名;
    源代码:

    SELECT Sname
    FROM Student, SC
    WHERE Student.Sno = SC.Sno AND Ssex = '女'
    GROUP BY Sname
    HAVING COUNT(Cno) >= 1;
    

    实验结果如下:
    在这里插入图片描述

    (3).检索王同学不学的课程的课程号;
    源代码:

    SELECT Cno
    FROM Course
    WHERE Cno != ALL 
    (SELECT Course.Cno 
    FROM Student, SC,Course
    WHERE (Sname LIKE '王%' AND Student.Sno = SC.Sno AND SC.Cno = Course.Cno));
    

    实验结果如下:
    在这里插入图片描述

    (4).检索至少选修两门课程的学生学号;
    源代码:

    SELECT Sno
    FROM SC
    GROUP BY Sno
    HAVING COUNT(Cno) >= 2;
    

    实验结果如下:
    在这里插入图片描述

    (5).检索全部学生都选修的课程的课程号与课程名;
    源代码:

    SELECT Cno, Cname
    FROM Course 
    WHERE NOT EXISTS(
    SELECT * FROM Student
    	WHERE NOT EXISTS(
    	SELECT * FROM SC
    	WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno
    	) 
    );
    

    实验结果如下:
    在这里插入图片描述

    (6).检索选修了所有3学分课程的学生学号。
    源代码:

    SELECT Sno
    FROM Student
    WHERE NOT EXISTS(
    	SELECT * FROM Course
    	WHERE Course.Ccredit = 3 AND NOT EXISTS(
    		SELECT * FROM SC
    		WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno
    ));
    

    实验结果如下:
    在这里插入图片描述
    3. 基于“教学管理”数据库jxgl,试用SQL的查询语句表达下列查询。
    (1).统计所有学生选修的课程的课程号与课程名;
    源代码:
    SELECT COUNT(DISTINCT Cno) ‘所有学生选修课的课程门数’
    FROM SC;
    实验结果如下:
    在这里插入图片描述

    (2).求选修4号课程的学生的平均年龄;
    源代码:

    SELECT AVG(Sage) '选修4号课程的学生的平均年龄'
    FROM Student, SC
    WHERE Student.Sno = SC.Sno AND Cno = 4
    GROUP BY Student.Sno;
    

    实验结果如下:
    在这里插入图片描述

    (3).求学分为3的每门课程的学生平均成绩;
    源代码:

    SELECT AVG(Grade) '学分为3的每门课程的学生的平均成绩'
    FROM SC, Course
    WHERE SC.Cno = Course.Cno AND Course.Ccredit = 3
    GROUP BY SC.Cno;
    

    实验结果如下:
    在这里插入图片描述

    (4).统计每门课程的学生选修人数,超过三人的课程才统计,要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列;
    源代码:

    SELECT Cno, COUNT(Sno) Num
    FROM SC
    GROUP BY Cno
    HAVING COUNT(Sno) > 3
    ORDER BY COUNT(Sno) DESC, Cno ASC;
    

    实验结果如下:
    在这里插入图片描述
    (5).检索学号比王非同学大,而年龄比他小的学生姓名;
    源代码:

    SELECT Sname
    FROM Student
    WHERE Sno > (SELECT Sno FROM Student WHERE Sname = '王非')
    AND Sage < (SELECT Sage FROM Student WHERE Sname = '王非');
    

    实验结果如下:
    在这里插入图片描述
    (6).检索姓名以王打头的所有学生的姓名和年龄;
    源代码:

    SELECT Sname,Sage
    FROM Student
    WHERE Sname like '王%';
    

    实验结果如下:
    在这里插入图片描述

    (7).在SC中检索成绩为空值的学生学号和课程号;
    源代码:

    SELECT Sno,Cno
    FROM SC
    WHERE Grade = null;
    

    实验结果如下:
    在这里插入图片描述
    (8).求年龄大于女同学平均年龄的男同学的姓名和年龄;
    源代码:

    SELECT Sname, Sage
    FROM Student
    WHERE Ssex = '男' AND Sage > (SELECT AVG(Sage) FROM Student WHERE Ssex = '女');
    

    实验结果如下:
    在这里插入图片描述

    (9).求年龄大于所有女同学年龄的男同学的姓名和年龄;
    源代码:

    SELECT Sname, Sage
    FROM Student
    WHERE Ssex = '男' AND Sage > ALL(SELECT Sage FROM Student WHERE Ssex = '女');
    

    实验结果如下:
    在这里插入图片描述

    (10).检索所有比“王华”年龄大的学生姓名、年龄和性别;
    源代码:

    SELECT Sname, Sage, Ssex
    FROM Student
    WHERE Sage > (SELECT Sage FROM Student WHERE Sname = '王华');
    

    实验结果如下:
    在这里插入图片描述
    (11).检索选修2号课程的学生中成绩最高的学生的学号;
    源代码:

    SELECT TOP(1) Student.Sno
    FROM Student, SC
    WHERE Cno = 2 AND Student.Sno = SC.Sno
    ORDER BY SC.Grade DESC;
    

    实验结果如下:
    在这里插入图片描述
    (12).检索学生姓名及其所选课程的课程号和成绩;
    源代码:

    SELECT Sname, Cno, Grade
    FROM Student, SC
    WHERE Student.Sno = SC.Sno;
    

    实验结果如下:
    在这里插入图片描述

    (13).检索选修4门以上课程的学生总成绩(不统计不及格的课程),并要求按总成绩的降序排列出来
    源代码:

    SELECT SUM(Grade) '总成绩'
    FROM SC
    WHERE Grade >= 60
    GROUP BY Sno
    HAVING COUNT(Cno) >= 4
    ORDER BY '总成绩' DESC;
    

    实验结果如下:
    在这里插入图片描述

    展开全文
  • SQL是结构化查询语言(structrued query language)的缩写,它实际上包括查询、定义、操纵和控制四个部分,是一种功能齐全的数据库语言。该语言早在70年代中期由Boyce和Chamberlin提出。由于SQL具有语言简洁、方便实用...
  • 数据库:结构化查询语言

    千次阅读 2018-07-31 19:07:43
    什么是结构化查询语言 结构化查询语言分类 1. 什么是结构化查询语言 SQL 是非过程化语言:只需要知道要做什么,不必担心如何去做。美国国家标准学会(ANSI)制定了一个标准 SQL——最新版本是 SQL-99 或 SQL3。...

    在开始编写文章前,有几个问题需要思考一下:

    • 什么是结构化查询语言
    • 结构化查询语言分类

    1. 什么是结构化查询语言

    SQL 是非过程化语言:只需要知道要做什么,不必担心如何去做。美国国家标准学会(ANSI)制定了一个标准 SQL——最新版本是 SQL-99 或 SQL3。ANSI 的 SQL 标准也被国际标准化组织(ISO),即一个由超过 150 个国家的标准体组成的团体所认可。

    SQL 的核心是查询。实际上,在 SQL 中,查询这个词包含了问题和操作两层意思。大多数 SQL 查询用来回答这些问题,如“库存商品中哪些价格超过 $100,这些商品现各有多少?”。然而,许多 SQL 查询用于添加或删除表记录或修改属性值等操作。还有的 SQL 查询创建新的表或索引。

    2. 结构化查询语言分类

    • 数据定义语言(DDL):SQL 包括创建表、索引和视图等数据库对象命令,以及定义这些数据库对象的访问权限命令。
    • 数据操纵语言(DML):定义数据检索和更新。

    2.1 数据定义语言

    当创建一个新的数据库,RDBMS 会自动创建数据库字典来存储元数据并创建一个默认的数据库管理员。创建保存数据库的物理文件意味着与操作系统以及操作系统支持的文件系统进行交互。

    2.1.1 数据库模式

    在 SQL 环境中,模式(schema)是一组数据库对象——如表和索引——彼此是相关的。通常,模式属于单个用户或应用程序。一个数据库可以有多个模式,分别属于不同的用户或应用程序。把一个模式看成是一个数据库对象的逻辑分组,如表、索引和视图。模式能有效地将表按照所有者(或功能)分组,并且实施一个一级安全措施,允许每个用户只能看到数据该用户的表。

    ANSI SQL 标准定义了一个创建数据库模式的命令:

    CREATE SCHEMA AUTHORIZATION {创建者};

    大多数企业级的 RDBMS 支持这样的命令。然而,这个命令很少直接使用——在命令行中(当一个用户被创建,DBMS 自动给该用户分配一个模式)。在 DBMS 中,CREATE SCHEMA AUTHORIZATION 命令必须由拥有该模式的用户发布。也就是说,如果用 JONES 身份登录,则只能使用 CREATE SCHEMA AUTHORIZATION JONES 命令。

    注意:MySQL 里没有 create schema 这条语句,而是对应 create database。

    2.1.2 创建表结构

    使用 CREATE TABLE 命令语法如下:

    CREATE TABLE 表名(
        列1    数据类型    [约束]  [,
        列2    数据类型    [约束]  ][,
        PRIMARY KEY (列1   [,列2])][,
        FOREGIN KEY (列1   [,列2]) REFERENCES 表名][,
        CONSTRAINT 约束]);

    为了使 SQL 代码更具有可读性,多数 SQL 程序员使用一行代码来定义每一列(属性)。此外,空格用来排列属性的特征和约束。最后,表和属性名全部大写。

    注意:[......]:一个可选参数——方括号里面的内容是可选的。

    CREATE TABLE VENDOR (
        V_CODE          INTEGER           NOT NULL      UNIQUE,
        V_NAME          VARCHAR(3)        NOT NULL,
        V_CONTANT       VARCHAR(15)       NOT NULL,
        V_AREACODE      CHAR(3)           NOT NULL,
        V_PHONE         CHAR(8)           NOT NULL,
        V_STARE         CHAR(2)           NOT NULL,
        V_ORDER         CHAR(1)           NOT NULL,
        PRIMARY KEY (V_CODE));    

    PRODUCT 表

    CREATE TABLE PRODUCT (
        P_CODE          VARCHAR(10)       NOT NULL    UNIQUE,
        P_DESCRIPT      VARCHAR(35)       NOT NULL,
        P_INDEX         DATE              NOT NULL,
        P_QOH           SMALLINT          NOT NULL,
        P_MIN           SMALLINT          NOT NULL,
        P_PRICE         NUMBER(8,2)       NOT NULL,
        P_DISCOUNT      NUMBER(5,2)       NOT NULL,
        V_CODE          INTEGER,
        PRIMARY KEY (P_CODE),
        FOREIGN KEY (V_CODE) REFERENCES VENDOR ON UPDATE CASCADE);
    
    • 属性的 NOT NULL 规范确保一个数据被输入。必须保证数据有效的。NOT NULL 规范将不允许终端用户使属性为空值(根本没有数据输入)。因为在表中提出这个规范并保存在数据字典,所以应用程序可以用这个信息自动创建数据字典合法性。
    • UNIQUE 规范在各个属性上创建唯一索引。用它来避免列值重复。
    • 主码属性包含 NOT NULL 和 UNIQUE 规范。这些规范确保了实体完整性。如果不支持 NOT NULL 和 UNIQUE 规范,就用 PRIMARY KEY。
    • 整个表的定义包含在括号里面。逗号用来隔开表中各个元素(属性、主码和外码)定义。(如果是复合主码,则主码中所有属性包含在括号里面并用逗号隔开。主码属性的顺序很重要,因为索引从第一个开始,然后是下一个属性。)
    • ON UPDATE CASCADE 规范保证,如果修改 VENDOR 的 V_CODE,变化将自动应用到这个系统(级联)所有相关联的外码以确保参照完整性。

    表结构的所有修改都可以使用 ALTER TABLE 命令,后面跟着一个你想做的特殊修改的关键字。有 3 种选择:ADD、MODIFY 和 DROP。用 ADD 添加字段,MODIFY 修改字段的特征,DROP 删除字段。大多数 RDBMS 不允许删除字段(除非该字段不包含任何值),因为这种行为可能会删除其他表使用的关键数据。添加或修改字段的基本语法为:

    ALTER TABLE 表名
        {ADD | MODIFY} (字段名 数据类型[{ADD | MODIFY} 字段 名数据类型]);

    ALTER TABLE 命令也可以用来增加表的约束。这种情形下,语法为:

    ALTER TABLE 表名
        ADD 约束 [ ADD 约束];

    也可以用 ALTER TABLE 命令来删除字段或表约束。语法如下:

    ALTER TABLE 表名
        DROP{PRIMARY KEY | COLUMN 字段名 | CONSTRAINT 约束名};

    注意当删除一个约束时,需要指明要删除的约束的名字。这就是为什么应 CREATE TABLE 或 ALTER TABLE 语句中给约束命名的原因。

    2.2 数据操纵语言

    2.2.1 添加表记录

    SQL 使用 INSERT 命令来向表中输入数据,INSERT 命令的基本语法如下:

    INSERT INTO 表名 VALUES (值1,值2,...,值n)

    如果需要添加多条记录到一个表中,用另外一个表作为数据源。INSERT 语句的语法为:

    INSERT INTO 表名 SELECT 字段列表 FROM 表名;

    INSERT 语句使用了 SELECT 子查询。子查询,也叫做嵌套查询或内查询,是嵌入(嵌套)在另一个查询中的查询。前面给出的 SQL 语句,INSERT 部分表示外查询,而且 SELECT 部分表示子查询。可以多层嵌套语句(在查询中嵌套查询);在每一层嵌套中,内查询的结果作为外(高一级)查询的输入。

    SELECT 子查询返回的值应该匹配 INSERT 语句中表的属性和数据类型。如果插入的表中有一个日期属性、一个数字属性和一个字符属性,则 SELECT 子查询应该返回一行或多行,每行中的第一列有日期值,第二列有数字值,第三列有字符值。

    2.2.2 保存表的修改

    任何对表内容的修改要等到关闭数据库、关闭使用的程序或使用 COMMIT 命令时才保存到磁盘上。如果在发出 COMMIT 命令之前,数据库打开了后停电或发生一些其他中断,修改的内容将会丢失,只保留原始的表内容。COMMIT 命令的语法是:

    commit [工作]

    COMMIT 命令会永久保存对数据库中任何表的所有修改内容(如添加的记录、修改的属性值和删除的记录)。因此,如果打算永久保留对 PRODUCT 表的修改,用一下命令来实现是个好方法:COMMIT。

    然而,COMMIT 命令不只是为了保存修改内容。实际上,COMMIT 和 ROLLBACK 命令主要用来保证事务管理中的数据库更新完整。

    2.2.3 显示表记录

    SELECT命令用于显示表的内容。SELECT命令的语法如下:

    SELECT 字段列表 FROM 表名;

    字段列表表示一个或多个属性,用逗号隔开。可以用 * (星号)作为一个通配符来表示所有属性。通配符是一种符号,用作替代其他字符或命令的一个通用替换符。

    尽管 SQL 命令可以写作一行,但是复杂的命令语句最好分行显示,SQL 命令和命令的成员间用空格隔开。这种格式更容易看清 SQL 语句的成员、跟踪 SQL 逻辑,而且如果有必要,便于更正。

    通过对输出的记录设置约束,能够选择表的部分内容。可以用 WHERE 子句给 SELECT 语句增加条件约束。下面的语法可以指定选择哪些行:

    SELECT      字段列表
    FROM        表列表
    [WHERE      条件列表 ];

    SELECT 语句检索出所有和指定条件匹配的记录——也称为条件判别式——在 WHERE 子句中指定。SELECT 语句的 WHERE 子句中的条件列表由一个或多个条件表达式组成,用逻辑运算符连接。WHERE 子句是可选的。如果没有记录满足 WHERE 子句中的判别式,将看到一个空白屏或一条消息通知你没有检索到记录。

    2.2.4 查询结果排序

    当显示顺序很重要时,ORDER BY 字句特别有用。语法为:

    SELECT        字段列表
    FROM          表列表
    [WHERE        条件列表]
    [ORDER BY     字段列表 [ASC | DESC] ];

    虽然可以选择排序的类型——升序或降序——默认排序为升序。

    2.2.5 显示唯一值

    SQL 的 DISTINCT 子句产生一个彼此不相同的值列表。例如,命令:

    SELECT DISTINCT V_CODE
    FROM PRODUCT

    2.2.6 数据分组

    在 SELECT 语句中使用 GROUP BY 子句可以快速且容易得到频率分布。其语法是:

    SELECT        列列表
    FROM          表列表
    [WHERE        条件列表 ]
    [GROUP BY     列列表 ]
    [HAVING       条件列表 ]
    [ORDER BY     列列表 [ASC | DESC ] ];

    当在 SELECT 语句中将属性列和聚集函数结合在一起时,通常都会用到 GROUP BY 子句(只有当和某个 SQL 聚集函数,如 COUNT、MIN、MAX、AVG 和  SUM 一起使用时,GROUP BY 子句才有效。)。

    在一个 SELECT 语句中使用 GROUP BY 子句时:

    • SELECT 的列列表必须包括一个列名和聚集函数的组合。
    • GROUP BY 子句列列表必须包括所有在 SELECT 列列表中指定的非聚集函数列。如果有必要,也可以按 SELECT 的列列表中的任意聚集函数列分组。
    • GROUP BY 子句列列表可以包含任何 SELECT 语句的 FROM 子句中的表中任意列,即使这些列不出现在 SELECT 的列列表中。

    GROUP BY 用法的一个特殊扩展是 HAVING 子句。HAVING 运算与 SELECT 语句中的 WHERE 子句非常类似。但是,WHERE 子句作用于每一行的列和表达式上,而 HAVING 子句作用于一个 GROUP BY 运算的输出上。

    2.3 更新表记录

    用 UPDATE 命令修改表中的数据。该命令语法为:

    UPDATE   表名
    SET      列名 = 表达式 [, 列名 = 表达式]
    [WHERE   条件列表];

    2.4 恢复表的内容

    如果还没有 COMMIT 命令在数据库中永久保存修改结果,可以用 ROLLBACK 命令将数据库恢复到以前的状态。ROLLBACK 命令能取消从上次 COMMIT 命令依赖所做的修改操作,将数据恢复到修改前的值。将数据恢复到“修改前”的状态,输入:ROLLBACK;

    COMMIT 和 ROLLBACK 命令只能和数据操纵命令添加、修改和删除一起使用。

    2.5 删除表记录

    用 DELETE 语句很容易删除表中的记录,语法为:

    DELETE  FROM  表名
    [WHERE  条件列表]

    2.6 算术运算符:优先级规则

    SQL 命令常和以下算术运算符一起使用:

    • +:加
    • -:减
    • *:乘
    • /:除
    • ^:幂(一些应用程序使用**)

    在属性上执行数学运算时,记住优先级规则。正如名字锁表达的意思一样,优先级规则是完成计算的顺序。例如,注意以下计算次序的顺序:

    1. 执行括号里的运算。
    2. 执行幂运算。
    3. 执行乘法和除法运算。
    4. 执行加法和减法运算。

    2.7 逻辑运算符:AND、OR 和 NOT

    SQL 允许在一个查询中用逻辑运算符连接多个条件。逻辑运算符包括 AND、OR 和 NOT。

    • AND:执行的是并、且操作。
    • OR:执行的是或操作。
    • NOT:否定一个条件表达式的结果。通常用于查找不匹配一个确定条件的行。

    2.8 特殊运算符

    ANSI 标准的 SQL 允许将特殊运算符和 WHERE字句一起使用。特殊运算符包括:

    • BETWEEN:用于检查属性是否在一个范围内。
    • IS NULL:用于检查属性值是否为空。
    • LIKE:用于检查属性值是否和指定的字符串匹配。LIKE 和通配符一起用来在字符串属性中查找模式。当不知道完整的字符串时标准 SQL 允许使用百分号(%)和下划线(_)通配符来匹配。% 意味着任何和所有后面和前面的字符是匹配的;_ 意味着任何一个字符可以被下划线替换。
    • IN:用于检查属性值是否匹配值列表中的某个值。IN 运算符用了一个值列表。列表中所有值的数据类型必须相同。列表中每个值和属性相比较。
    • EXISTS:用于检查子查询是否返回任何记录。

    2.9 聚集函数

    SQL 可以执行各种数学统计,如计算满足指定条件的行数、查找某个属性上的最小或最大值、计算一列的值之和以及一列的平均值。这些聚集函数如下:

    • COUNT:含义非空值的行数。COUNT(*) 聚集函数用于计算一个查询结果集的行数。比较而言,COUNT(column) 聚集函数计算一个指定列中非空值的数量。
    • MIN:在给定行中的最小属性值
    • MAX:在给定行中的最大属性值
    • SUM:给的行中所有值之和
    • AVG:给的行中的平均值

    2.10 创建视图

    一个关系运算符如 SELECT 的输出是另一个关系(或表)。假设在每天结束的时候,要将一份所有商品的清单交个记录员,也就是,现有数量小于或等于最小数量的商品。与其每天结束的时候输入同样的查询,在数据库中永久保存这个查询不是更好吗?这就是视图的功能。视图(view)是建立在 SELECT 查询上的一个虚拟表。查询可以包含来自一个或多个表的列、可计算列、别名和聚集函数。视图建立在它上面的表称为基本表。可以用 CREATE VIEW 命令创建一个视图:

    CREATE VIEW 视图名 AS SELECT 查询;

    CREATE VIEW 语句是一个数据定义命令,存储子查询规范——SELECT 语句用于产生虚拟表——在数据字典中。

    展开全文
  • 数据库面试题:数据库查询语句

    千次阅读 2021-02-02 13:36:02
    Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高地所有学生的学号select a.S#from (select s#,score ...

    Student(S#,Sname,Sage,Ssex) 学生表

    Course(C#,Cname,T#) 课程表

    SC(S#,C#,score) 成绩表

    Teacher(T#,Tname) 教师表

    问题:

    1、查询“001”课程比“002”课程成绩高地所有学生的学号

    select a.S#

    from (select s#,score from SC where C#=’001′) a,

    (select s#,score from SC where C#=’002′) b

    where a.score>b.score and a.s#=b.s#;

    2、查询平均成绩大于60分的同学的学号和平均成绩

    select S#,avg(score)

    from sc

    group by S# having avg(score) >60;

    3、查询所有同学的学号、姓名、选课数、总成绩

    select Student.S#,Student.Sname,count(SC.C#),sum(score)

    from Student left Outer join SC on Student.S#=SC.S#

    group by Student.S#,Sname

    4、查询姓“李”的老师的个数

    select count(distinct(Tname))

    from Teacher

    where Tname like ‘李%’;

    5、查询没学过“叶平”老师课的同学的学号、姓名

    select Student.S#,Student.Sname

    from Student

    where S# not in (select distinct( SC.S#) from SC,Course,Teacher whe

    展开全文
  • 点击上方「蓝字」关注我们前言随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数...

    点击上方「蓝字」关注我们

    前言

    随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,亟需一种支持海量复杂数据关系运算的数据库,
    图数据库 应运而生。

    世界上很多著名的公司都在使用图数据库。比如:

    • 社交领域 :Facebook, Twitter,Linkedin用它来管理社交关系,实现好友推荐

    • 零售领域 :eBay,沃尔玛使用它实现商品实时推荐,给买家更好的购物体验

    • 金融领域 :摩根大通,花旗和瑞银等银行在用图数据库做风控处理

    • 汽车制造领域 :沃尔沃,戴姆勒和丰田等顶级汽车制造商依靠图数据库推动创新制造解决方案

    • 电信领域 :Verizon, Orange和AT&T 等电信公司依靠图数据库来管理网络,控制访问并支持客户360

    • 酒店领域 :万豪和雅高酒店等顶级酒店公司依使用图数据库来管理复杂且快速变化的库存

    既然图数据库应用这么广泛,越来越多的企业和开发者开始使用它,那它究竟什么过人之处呢,下面我们来揭开它的神秘面纱。


    1. Why Graph DB?


    学过数据结构这么课程的同学脑海中应该或多或少有 的概念。

    1.1 什么是图?

    图由两个元素组成:节点关系

    每个节点代表一个实体(人,地,事物,类别或其他数据),每个关系代表两个节点的关联方式。这种通用结构可以对各种场景进行建模 -
    从道路系统到设备网络,到人口的病史或由关系定义的任何其他事物。

    1.2 什么是图数据库?

    图数据库(Graph database) 并非指存储图片的数据库,而是以 这种数据结构存储和查询数据。

    图形数据库 是一种在线数据库管理系统,具有处理图形数据模型的创建,读取,更新和删除(CRUD)操作。

    与其他数据库不同, 关系 在图数据库中占首要地位。这意味着应用程序不必使用外键或带外处理(如MapReduce)来推断数据连接。

    与关系数据库或其他NoSQL数据库相比,图数据库的数据模型也更加简单,更具表现力。

    图形数据库是为与事务(OLTP)系统一起使用而构建的,并且在设计时考虑了事务完整性和操作可用性。

    1.3 两个重要属性

    根据存储和处理模型不同,市面上图数据库也有一些区分。

    比如:
    Neo4J 就是属于原生图数据库,它使用的后端存储是专门为Neo4J这种图数据库定制和优化的,理论上说能更有利于发挥图数据库的性能。

    JanusGraph 不是原生图数据库,而将数据存储在其他系统上,比如Hbase。

    ① 图存储

    一些图数据库使用 原生图存储
    ,这类存储是经过优化的,并且是专门为了存储和管理图而设计的。并不是所有图数据库都是使用原生图存储,也有一些图数据库将图数据序列化,然后保存到关系型数据库或者面向对象数据库,或其他通用数据存储中。

    ② 图处理引擎

    原生图处理(也称为 无索引邻接 )是处理图数据的最有效方法,因为连接的节点在数据库中物理地 指向
    彼此。非本机图处理使用其他方法来处理CRUD操作。


    2. 对比

    2.1 与NoSQL数据库对比

    NoSQL数据库大致可以分为四类:

    • 键值(key/value)数据库

    • 列存储数据库

    • 文档型数据库

    • 图数据库

    2.2 与关系型数据库对比

    关系型数据库实际上是不擅长处理关系的。很多场景下,你的业务需求完全超出了当前的数据库架构。

    举个栗子:假设某关系型数据库中有这么几张用户、订单、商品表:

    当我们要查询:“用户购买了那些商品?” 或者 “该商品有哪些客户购买过?” 需要开发人员JOIN几张表,效率非常低下。

    而“购买该产品的客户还购买了哪些商品?”类似的查询几乎不可能实现。

    关系查询性能对比

    在数据关系中心,图形数据库在查询速度方面非常高效,即使对于深度和复杂的查询也是如此。在《Neo4j in Action》这本书中,作者在关系型数据库
    和图数据库(Neo4j)之间进行了实验。

    他们的实验试图在一个社交网络里找到最大深度为5的朋友的朋友。他们的数据集包括100万人,每人约有50个朋友。实验结果如下:

    在深度为2时(即朋友的朋友),两种数据库性能相差不是很明显;深度为3时(即朋友的朋友的朋友),很明显,关系型数据库的响应时间30s,已经变得不可接受了;深度到4时,关系数据库需要近半个小时才能返回结果,使其无法应用于在线系统;深度到5时,关系型数据库已经无法完成查询。而对于图数据库Neo4J,深度从3到5,其响应时间均在3秒以内。

    可以看出,对于图数据库来说,数据量越大,越复杂的关联查询,约有利于体现其优势。从深度为4/5的查询结果我们可以看出,图数据库返回了整个社交网络一半以上的人数。


    3. Neo4J 和 JanuasGraph

    根据DB-Engines最新发布的图数据库排名,Neo4J仍然大幅领先排在第一位:


    Neo4J

    Neo4J是由Java实现的开源图数据库。自2003年开始开发,直到2007年正式发布第一版,并托管于GitHub上。

    Neo4J支持ACID,集群、备份和故障转移。目前Neo4J最新版本为3.5,分为社区版和企业版,社区版只支持单机部署,功能受限。企业版支持主从复制和读写分离,包含可视化管理工具。

    JanusGraph

    JanusGraph是一个Linux基金会下的开源分布式图数据库
    。JanusGraph提供Apache2.0软件许可证。该项目由IBM、Google、Hortonworks支持。JanusGraph是由TitanDB
    图数据库修改而来,TitanDB从2012年开始开发。目前最新版本为0.3.1。

    JanusGraph支持多种储存后端(包括Apache Cassandra、Apache HBase、Bigtable、Berkeley
    DB)。JanusGraph的可扩展性取决于与JanusGraph一起使用的基础技术。例如,通过使用Apache
    Cassandra作为存储后端,可以将JanusGraph简单地扩展到多个数据中心。

    JanusGraph通过与大数据平台(Apache Spark,Apache Giraph,Apache
    Hadoop)集成,支持全局图数据的分析、报告和ETL。

    JanusGraph通过外部索引存储(Elasticsearch,Solr,Lucene)支持地理、数字范围和全文搜索。

    3.1 标记属性图模型

    (1)节点

    • 节点是主要的数据元素

    • 节点通过 关系 连接到其他节点

    • 节点可以具有一个或多个 属性 (即,存储为键/值对的属性)

    • 节点有一个或多个 标签 ,用于描述其在图表中的作用

    • 示例:人员节点与Car节点

    (2)关系

    • 关系连接两个节点

    • 关系是方向性的

    • 节点 可以有多个甚至递归的关系

    • 关系可以有一个或多个属性(即存储为键/值对的属性)

    (3)属性

    • 属性是命名值,其中名称(或键)是字符串

    • 属性可以被索引和约束

    • 可以从多个属性创建复合索引

    (4)标签

    • 标签用于将 节点 分组

    • 一个节点可以具有多个标签

    • 对标签进行索引以加速在图中查找节点

    • 本机标签索引针对速度进行了优化


    4. Cypher图查询语言

    Cypher是Neo4j的图形查询语言,允许用户存储和检索图形数据库中的数据。

    举例,我们要查找Joe的所以二度好友:

    查询语句如下:

        MATCH      (person:Person)-[:KNOWS]-(friend:Person)-[:KNOWS]-
          (foaf:Person)
        WHERE 
          person.name = "Joe"
          AND NOT (person)-[:KNOWS]-(foaf)
        RETURN
          foaf
    




    Joe认识Sally,Sally认识Anna。Bob被排除在结果之外,因为除了通过Sally成为二级朋友之外,他还是一级朋友。


    5. 小结

    图数据库应对的是当今一个宏观的商业世界的大趋势:凭借高度关联、复杂的动态数据,获得洞察力和竞争优势。国内越来越多的公司开始进入图数据库领域,研发自己的图数据库系统。对于任何达到一定规模或价值的数据,图数据库都是呈现和查询这些关系数据的最好方式。而理解和分析这些图的能力将成为企业未来最核心的竞争力。

    http协议无状态中的 "状态" 到底指的是什么?!

    用Nginx实现接口慢查询并可示化展示TOP 20

    MySQL 加锁和死锁解析

    如果是MySQL引起的CPU消耗过大,你会如何优化?

    在看”的永远18岁~

    展开全文
  • MYSQL数据库原理与应用-个人总结(上)

    千次阅读 多人点赞 2020-12-26 20:18:40
    序言 此复习为个人整理的有关MySql的复习,大量知识点来自老师上课复习、个人总结、以及部分网上资料,以便能够提供给自己复习时的...数据库管理系统(DBMS):安装在操作系统之上,是一个管理、控制数据库中各种数据库
  • 数据库原理及应用实验报告,MySQL

    千次阅读 2020-06-21 13:12:54
    数据库原理及应用 实 验 报 告 册 运用Navicat软件,结合MySQL,对下面几个实验进行分析讲解。 课 程 数据库原理及应用实验 批阅教师签名 *** 学 院 信息工程学院 专 业 计算机科学与技术 班 级 ...
  • 8、巩固SQL语言命令、练习E-R图的绘制、体会数据库应用数据库理论知识的衔接; 9、通过前几个实验的练习,对数据库的基本概念有了一定的掌握。本实验综合所掌握的内容加以应用,选定自己熟悉的一种开发工具设计...
  • 数据库应用程序开发入门篇—— 结构化查询语言SQL及常用操作 1.什么是SQL 构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理...
  • 数据库基础应用知识总结

    千次阅读 多人点赞 2016-11-12 13:26:54
    数据库高级应用 一、数据库、表的基本操作 二、字段的修改及增删改查 三、约束 四、函数 五、视图与索引 六、触发器
  • 深入数据库理论:查询语言

    千次阅读 2016-06-22 22:52:16
    深入数据库理论:查询语言“Theory is when you know everything but nothing works. Practice is when everything works but no one knows why. In our lab, theory and practice are combined: nothing works and ...
  • 包括数据模型、数据库结构、数据库系统、数据库设计、关系运算、关系规范化、关系查询(SQL语言)等方面的知识;介绍至少一种实际数据库管理系统的构成与使用。目的使学生通过学习和上机操作实践掌握数据库系统的...
  • SQL Server数据库快速入门与应用

    千人学习 2020-06-23 08:57:34
    Server 是 Microsoft 开发的一个关系数据库管理系统(RDBMS),现在是世界上最为常用的数据库之一。本课程,基于 SQL Server 2019 进入学习,从数据库系统的相关概念、SQL Server相关概述、数据库的创建与...
  • 【最全】《数据库原理及应用》知识点整理+习题

    万次阅读 多人点赞 2020-05-26 10:57:22
    数据库管理技术的发展过程(三个阶段) 数据模型(Data Model) 逻辑模型的分类(非关系模型与关系模型) 画E-R图 数据库系统结构 第2章 关系数据库 2.1关系数据结构及形式化定义 2.2关系操作 2.3关系的完整性 2.4...
  • 数据库应用(概念)

    千次阅读 2017-08-13 23:31:18
    在同一个数据集合中,不同的选择条件对应了...数据库是具有逻辑关系和确定意义的数据结合,它能克服传统文件组织所产生的一系列问题,数据冗余小,由于关系型数据库管理系统对于信息查询具有很大的灵活性,并且设计简单
  • 提高数据库查询速度的优化方法

    千次阅读 2019-06-06 10:08:16
    2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id ...
  • 数据库原理及应用学习笔记

    千次阅读 多人点赞 2018-10-02 16:09:30
    这时在B站上看的东南大学的视频的学习笔记,主要是看了一天的数据库系统概念这本神书感觉有点吃力很累,所以还是决定这种看视频做笔记的模式了 引言 什么是数据库 什么事数据库管理系统 文件VS数据库 文件...
  • Neo4j的基本概念和应用场景 1. 基本概念 每个标签下可以有N个节点,每个节点代表一个对象,相当于数据表里面的一...属性图模型以及其上的Cypher查询语言最早定义于著名的图数据库系统——Neo4j。 Neo4j是由Neo4j公司开
  • Nosql数据库的分类及应用场景

    千次阅读 2017-07-05 16:17:32
    当前使用最多的是key-value模型,是一种非关系型数据库,主要是解决是海量数据下的数据库性能和扩展能力。 它最大的特点在于要求的数据量大,对事物的要求低。   NoSQL 它打破了长久以来关系型数
  • 关系数据库标准化语言SQL

    千次阅读 2017-07-11 10:49:36
    第三章 关系数据库标准化语言SQL 1.简述数据库系统的系统结构特点。 数据库系统的体系结构,包括数据库管理系统的三级模式结构和两极映射。 外模式:是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述...
  • MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL数据库以其精巧灵活、运行速度快、经济适用性强、开放源码等优势,作为网站数据库获得许多中小型网站的开发公司的青睐。MySQL性能卓越,搭配PHP和...
  • 数据库语言SQL

    千次阅读 2018-07-11 18:35:07
    数据库语言SQL SQL的发展 1974年,由Boyce和Chamberlin提出 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、...
  • 数据库原理与应用》复习总结

    万次阅读 多人点赞 2018-09-19 16:32:25
    数据库原理与应用》复习总结 数据库技术就是主要研究如何科学的组织和存储数据,高效的获取和处理数据,并可以满足用户各种不同的信息需求的技术,因为对数据库技术的需求非常大,所以学习这门课的知识和技术是...
  • 数据库技术与应用》读书笔记。
  • 行存储:传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based,基于行),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的,一行中的数据在存储介质中以...
  • 地理信息系统(GIS)作为一门融计算机图形和数据库于一体,储存和处理空间信息的边缘综合性学科,能把地理位置和相关属性有机结合起来,根据实际需要准确真实、图文并茂地输出给用户,满足不同部门、不同用户对...
  • 数据库查询优化技术 学习笔记(一)   我是看李海翔的《数据库技术丛书·数据库查询优化器的艺术:原理解析与SQL性能优化》这本书的视频讲解学习的,因为数据库的知识学的不多,直接看优化有些吃力,慢慢补吧。...
  • 第 1章 习题参考答案 一、 选择题 C 2. B 3. D 4. C 5. D B 7. A 8. B 9. D 10. B C 12. D 13. D 14. D 15. B C 17....D 22....数据库系统阶段 ...数据库管理系统(DBMS) 一对多 独立性 完整性控制 ...
  • 提高数据库查询速度的方法

    万次阅读 2017-12-25 13:03:42
    处理百万级以上的数据提高查询速度的方法:  1.应尽量避免在 where 子句中使用!=或  2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。  3.应尽量避免在 where ...
  • 编程语言数据库的关系

    万次阅读 2017-05-21 07:22:13
    前台的用户界面是用编程语言实现的,后台的数据存储是由数据库管理系统承载的。编程语言数据库管理系统就好比是信息管理系统的两个轮子,是一张扑克的正反面,是一台戏的前台和后台,是一场演唱会的演员和乐队,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,777
精华内容 74,710
关键字:

数据库查询语言的实际应用