SQL 面试题

SQL 面试题_第1张图片

在学习SQL语句,基本语法时,找些面试题学习稳固知识点,接接地气。下面的SQL面试题大概会有100题,分十季分享给大家,希望大家能坚持学下来,一定会有收获的!

第六季:

  1. 编写语句以将EMPLOYEE_ID设置为employee表中的主键。

  2. 编写语句将2个字段(EMPLOYEE_ID,FIRST_NAME)设置为employee表中的主键。

  3. 编写语句在INCENTIVES表中创建EMPLOYEE_REF_ID作为相对于employee表中的EMPLOYEE_ID的外键。

  4. select Count(*) 和select Count(1) 的区别?

  5. 查询EMPLOYEE表中雇员的详细信息,且数据存在INCENTIVES表中?

  6. 从employee表中获取在Last_Name中具有“%”的员工的姓名。

  7. 从右侧删除空格后,从employee表中获取FIRST_NAME。

  8. 如何优化GROUP BY?

  9. 何时使用索引?

  10. 使用索引的优缺点?


SQL 面试题_第2张图片

答案:

  1. ALTER TABLE EMPLOYEE add CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID)

  2. ALTER TABLE EMPLOYEE add CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID,FIRST_NAME)

  3. ALTER TABLE INCENTIVES ADD CONSTRAINT INCENTIVES_FK FOREIGN KEY (EMPLOYEE_REF_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID)

  4. 一般情况下,select count(*) 和select count(1) 两着返回结果是一样的;

    假如表沒有主键(Primary key),那么count(1)比count(*)快,如果有主键的話,那主键作为count的条件时候count(主键)最快;

    如果你的表只有一个字段的话那count(*)就是最快的;

    count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。

  5. select * from EMPLOYEE where exists (select * from INCENTIVES)

  6. Select FIRST_NAME from employee where Last_Name like '%[%]%'

  7. select RTRIM(FIRST_NAME) from employee

  8. 提高GROUP BY语句的效率, 可以通过将不需要的记录在GROUP BY之前过滤掉。例如下面两个查询返回相同结果但第二个明显就快了许多:

    效率低:

    select depno, avg(sal) from emp group by depno having depno = 101 or depno = 102;

    效率高:

    select depno, avg(sal) from emp where depno = 101 or depno = 102 group by depno;

  9. a. 当某字段数据更新频率较低,查询频率较高,经常有范围查询(>, <, =, >=, <=)或order by、group by发生时建议使用索引。并且选择度越大,建索引越有优势,这里选择度指一个字段中唯一值的数量/总的数量。

    b. 经常同时存取多列,且每列都含有重复值可考虑建立复合索引。

  10. 优点:

    大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。

    缺点:

    索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。

SQL 面试题_第3张图片

你可能感兴趣的:(SQL 面试题)