在学习SQL语句,基本语法时,找些面试题学习稳固知识点,接接地气。下面的SQL面试题大概会有100题,分十季分享给大家,希望大家能坚持学下来,一定会有收获的!
第六季:
编写语句以将EMPLOYEE_ID设置为employee表中的主键。
编写语句将2个字段(EMPLOYEE_ID,FIRST_NAME)设置为employee表中的主键。
编写语句在INCENTIVES表中创建EMPLOYEE_REF_ID作为相对于employee表中的EMPLOYEE_ID的外键。
select Count(*) 和select Count(1) 的区别?
查询EMPLOYEE表中雇员的详细信息,且数据存在INCENTIVES表中?
从employee表中获取在Last_Name中具有“%”的员工的姓名。
从右侧删除空格后,从employee表中获取FIRST_NAME。
如何优化GROUP BY?
何时使用索引?
使用索引的优缺点?
答案:
ALTER TABLE EMPLOYEE add CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID)
ALTER TABLE EMPLOYEE add CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID,FIRST_NAME)
ALTER TABLE INCENTIVES ADD CONSTRAINT INCENTIVES_FK FOREIGN KEY (EMPLOYEE_REF_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID)
一般情况下,select count(*) 和select count(1) 两着返回结果是一样的;
假如表沒有主键(Primary key),那么count(1)比count(*)快,如果有主键的話,那主键作为count的条件时候count(主键)最快;
如果你的表只有一个字段的话那count(*)就是最快的;
count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。
select * from EMPLOYEE where exists (select * from INCENTIVES)
Select FIRST_NAME from employee where Last_Name like '%[%]%'
select RTRIM(FIRST_NAME) from employee
提高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;
a. 当某字段数据更新频率较低,查询频率较高,经常有范围查询(>, <, =, >=, <=)或order by、group by发生时建议使用索引。并且选择度越大,建索引越有优势,这里选择度指一个字段中唯一值的数量/总的数量。
b. 经常同时存取多列,且每列都含有重复值可考虑建立复合索引。
优点:
大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。
缺点:
索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。