1、在SQL语言的Select语句中,用于对结果进行排序的是哪一个子句?C
    A.GROUP BY B.HAVING C.ORDER BY D.Where
    2、关系模型中实体与实体间是通过A联系的.
    A.表 B.图 C.树 D.关系
    3、在SQL语法中,用于更新的命令是B
    A.INSERT B.UPDATE C.DELETE D.CREATE
    4.现有一个学生信息表student,包含主键studentID(学生编号)。又有分数表scores,包含studntID(学生编号)、以及score(考试分数)。已知student表中共有50个学生,有45人参加了考试(分数存在scores表中),其中10人不及格。执行以下SQL语句:select * from student where exists(select studentID from score where score<60),可返回___A___条记录
    A. 50 B.45 C .10 D.0
    5.SQL 语言集数据查询、数据操纵、数据定义、数据控制功能于一体,其中create、drop、alter 语句是实现那种功能(B)
    A.数据查询 B.数据定义 C.数据操纵 D.数据控制
    1)、数据查询语言(DQL:Data Query Language):
    其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和 HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
    (2)、数据操作语言(DML:Data Manipulation Language):
    其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
    (3)、数据定义语言(DDL):
    其语句包括动词CREATE、DROP、ALTER。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
    (4)、数据控制语言(DCL):
    语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

    二、简答

    1. 数据库增删改查语句;

    整列插入insert into 表名 values(…..)
    缺省插入insert into 表名 (列名1,….)values(值1,…..)
    同时插入多条数据:insert into 表名 values(….)(….)….

    1. 修改

    update 表名 set 列1=值1,。。。where 条件;

    1. 删除

    delete from 表名 where 条件

    1. 查询

    select (要查询的东西)
    from (从哪里查)
    where 分组之前的过滤
    group by(分组)
    having 分组之后的过滤
    order by (排序)
    limit (分页)

    1. 如何创建一个表、如何修改一个表、如何删除一个表;

    https://www.cnblogs.com/sqbk/p/5806797.html

    1. 请谈谈对数据库索引的理解

    一、创建索引可以大大提高系统的查询性能(优点)。
    第一, 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
    第二, 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
    第三, 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
    第四, 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
    二、建立方向索引的不利因素(缺点)
    第一, 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
    第二, 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
    第三, 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    三、一般来说,应该在这些列上创建索引。
    第一, 在经常需要搜索的列上,可以加快搜索的速度;
    第二, 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
    第三, 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
    第四, 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
    第五, 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
    第六, 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

    1. 请谈谈对存储过程的理解

    存储过程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令。因此,可以将业务逻辑、企业规则写成过程或函数保存在数据库中,以便其他PL/SQL块使用,简化应用程序的开发和维护,提高效率和性能。

    1. 请谈谈对触发器的理解

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。
    举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除。
    CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
    trigger_name:触发器的名称
    tirgger_time:触发时机,为BEFORE或者AFTER
    trigger_event:触发事件,为INSERT、DELETE或者UPDATE
    tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
    trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
    所以可以说MySQL创建以下六种触发器:
    BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
    AFTER INSERT,AFTER DELETE,AFTER UPDATE

    1. 请谈谈对数据库中事务的理解

    2. 原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚。
      2. 一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态。(比如拿转账来讲,假设用户A和用户B两者的钱加起来一共是2000,那么不管是用户A还是用户B之间如何转账,转几次账,事务结束后两个用户的钱加起来应该还是2000,所以这就是事务的一致性)。
      3. 隔离性:指当多个用户并发访问数据库并且操作同一张表的时候,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
      4. 持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,哪怕是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
      简单的使用:
      步骤一:禁用步骤提交功能
      set autocommit = 0;
      步骤二:开启一个事务
      start transaction;
      步骤三:sql语句
      update table user set money=500 where name = “张三”;
      update table user set money=1500 where name = “李四”;
      步骤四:结束事务
      commit(提交)或者是rollback(回滚)。如果确定我们的语句没有问题,那么我们就可以commit,如果认为我们的语句有问题,那就rollback。

    3. 表和视图的区别

    一、两者的区别
    1)本质
    表是内容,视图是窗口。视图是已经编译好的sql语句,是基于sql语句的结果集的可视化的表,而表不是。
    2)实与虚
    表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
    3)是否存在物理记录
    视图没有,而表有。
    4)是否占用物理空间
    表占用物理空间,而视图不占用。视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改。
    5)是否影响
    视图的建立(create)和删除(drop)只影响视图本身,不影响对应的基本表。
    6)安全因素
    视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些sql语句的集合。从安全的角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。
    二、两者的联系
    视图是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有记录)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
    8、sql语句应该考虑哪些安全性?
    (1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量。
    (2)最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账户。
    (3)当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄漏服务器和数据库相关信息。

    9、MySQL左连接、右连接的区别?
    左连接的结果集包括指定的左表全部数据与匹配的右表数据,右表中没匹配的全为空值.关键字 left join
    右连接的结果集包含指定的右表全部数据与匹配的左边数据,左边中没匹配的全为空值.关键字 right join
    10、union 与union all的区别?
    union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排 序运算,删除重复的记录再返回结果。
    union all 则会显示重复结果,只是简单的两个结果合并并返回.所以效率比union高,在保证没有重复数据的情况下用union all.

    11、主键、外键的作用?
    mysql数据库_笔试题 - 答案详解 - 图1
    外键是可以为空?可以
    因为创建外键的时候, 是有一种。ON DELETE SET NULL。的可选择的处理方式.。这也就说明了, 那个外键, 是可以为空的, 否则怎么能够允许 ON DELETE SET NULL。
    12.数据库导入导出命令(结构+数据)?
    导出现有数据库数据:
    mysqldump -u用户名 -p密码 数据库名称 >导出文件路径 # 结构+数据
    mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径 # 结构
    导入现有数据库数据:
    mysqldump -uroot -p密码 数据库名称 < 文件路径
    13.完成以下题目

    1. 新建表 test

    id varchar2(20)
    name varchar2(20)
    addr varchar2(50)
    score number
    create table test
    (id varchar(20),
    name varchar(20),
    addr varchar(50),
    score int
    )
    2.给id增加主键约束
    alter table test add constraint pk_id primary key(id)
    3.查询出分数大于60分的人员,并按分数降序进行排列
    select * from test where score>60 order by score desc
    4.新增数据 001 zhangsan shenzhen 80
    insert into test(id,name,addr,score) values (‘001’,’zhansgan’,’shenzhen’,80)

    1. 将zhangsan的分数修改成60
      update test set score=60 where name=’zhangsan’

    7.删除zhangsan的信息
    delete from test where name=’zhangsan’
    二、表查询
    Student(S#,Sname,Sage,Ssex) 学生表
    Course(C#,Cname,T#) 课程表
    SC(S#,C#,score) 成绩表
    Teacher(T#,Tname) 教师表
    问题:
    1、查询平均成绩大于60分的同学的学号和平均成绩;
    select s#,avg(score) from sc where group by s# having avg(score)>60;
    2、查询所有同学的学号、姓名、选课数、总成绩;
    假设一门课只有一个成绩
    select Student.s#,sname,count(C#),sum(score) from Student inner join sc on Student.s#=sc.s# group by Student.s#,sname
    3、查询姓“李”的老师的个数;
    select count(*) from teacher where tname like’李%’
    4、查询没学过“叶平”老师课的同学的学号、姓名;
    select S#,Sname from Student where s# in (select S# from sc where c# not in (select c# from Course where T#=(select T# from teacher where Tname=’叶平’ ))
    1.先找到叶平老师上的课程C#
    2.在成绩表中排除上面查到的课程C#,找到学生S#
    3.根据上面的S# 找到学生信息。

    5、查询所有课程成绩小于60分的同学的学号、姓名;
    select S#,Sname from Student where s# not in (select S# from sc where score>=60)
    思路:排除有任何一科成绩大于等于60的学生就是我们要找的学生
    Select s#,sname from student,course,SC where student.s#=sc.s# and sc.c#=cource.c# group by s#,sname having max(sc.score)<60;