①从学生信息表(student)中提取姓名(name)列值为NULL的记录,SQL语句为:

解析:注意不是只查name值,而是查name值为空的所有信息

SQL语句为:

SELECT * FROM student WHERE name is NULL;

知识点:判断是否为空值用 IS NULL 和 IS NOT NULL。

②需查看stu表中索引的索引信息时,应使用的存储过程是()

A.sp_helpindex                                        B.sp_help

C.sp_helpdb                                             D.sp_helptext

解析:查看索引信息时,应使用的存储过程是sp-helpindex。sp_help:报告有关数据库对象的信息。sp_helpdb:返回指定数据库或者全部数据库的信息。sp_helptext:显示规则、默认、存储过程、触发器、视图等对象的未加密的文本定义信息。

③SQL中,对于数据定义语言DDL描述是:定义数据库的结构。

SQL主要分成四部分:

(1)数据库定义语言。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
(2)数据操纵语言。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
(3)数据库控制语言,授权,角色控制等。(DCL)包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。

(4)事务控制语言,嵌入式SQL的使用规定。(TCL)涉及到SQL语句嵌入在宿主语言程序中使用的规则。
④有一张工资表salaries,示例数据如下:

现要找出,除开在职员工(指to_date = '9999-01-01')的最大、最小工资(可能存在并列最大或最小)后,其他员工的平均工资avg_salary,示例数据查询后输出:

MySQL查询语句为:

我的理解:我觉得这个题目有点让人误解,我以为是除开在职员工工资的最大值和最小值,算剩下员工工资的平均值。当我看了他的结果,一计算发现73292是除了在职员工的最大值和最小值后,算在职员工的平均薪资。而且还说了可能有并列的最大值和最小值,如果按照D选项算出最大值和最小值后,又用了NOT IN 就会排除所以的最大值和最小值。感觉C选项是对的。但是官方答案是D。

⑤Mysql中表student_table(id,name,birth,sex),插入如下记录:

('1004' , '张三' ,'2000-08-06' , '男');
('1009' , '李四', '2000-01-01', '男');
('1010' , '李四', '2001-01-01', '男');
('1006' , '王五', '2000-08-06' , '女');
('1008' , '张三', '2002-12-01', '女');
('1012' , '张三', '2001-12-01', '女');
('1011' , '李四', '2002-08-06' , '女');

执行

select t1.*,t2.*
from (
select * from student_table where sex = '男' ) t1 
right join 
(select * from student_table where sex = '女')t2 
on  t1.name = t2.name ; 
的结果行数是:5
解析:
题中要求是右连接,以右表t2为主表,t1为从表,主表信息全部保存,但是从表多了一个李四符合条件,于是主表再重复一遍李四,结果为:
  id       name      birth           sex         id       name       birth           sex
NULL   NULL      NULL       NULL     1006    王五    2000-08-06     女
1004    张三    2000-08-06    男        1008    张三    2002-12-01     女
1004    张三    2000-08-06    男        1012    张三    2001-12-01     女
1009    李四    2000-01-01    男        1011    李四    2002-08-06     女
1010    李四    2001-01-01    男        1011    李四    2002-08-06     女
如果为inner join,就只查询两个表内名字相等的情况:
  id       name        birth         sex     id       name       birth          sex
1004    张三    2000-08-06    男    1008    张三    2002-12-01    女
1004    张三    2000-08-06    男    1012    张三    2001-12-01    女
1009    李四    2000-01-01    男    1011    李四    2002-08-06    女
1010    李四    2001-01-01    男    1011    李四    2002-08-06    女
如果为左连接left join,t1为主表,t2为从表,从表有两个张三满足条件,于是主表再重复一遍张三,则查得结果为:
  id       name        birth         sex     id      name        birth         sex
1004    张三    2000-08-06    男    1008    张三    2002-12-01    女
1004    张三    2000-08-06    男    1012    张三    2001-12-01    女
1009    李四    2000-01-01    男    1011    李四    2002-08-06    女
1010    李四    2001-01-01    男    1011    李四    2002-08-06    女
总结:
1)不论左右连接,两表排序都是先写的放在左边,后写的放在右边;
2)左右连接中,以谁为主表,则其信息全部保存。从表中有多于一项符合条件的,则额外重复一次主表从而列出全部从表情况。
知识点:
内部连接:INNER JOIN + ON
内连接通过关键字INNER JOIN 将多表进行连接,并通过关键字ON,指定连接条件。内连接(等同连接),返回连接表所有相匹配的记录,舍弃不匹配的记录。
左外连接:LEFT JOIN + ON
左连接,返回左表中的所有行,如果左表中的行在右表中没有匹配行,则结果中右表中的列返回空值。
右外连接:RIGHT JOIN + ON
与左外连接相反。


牛客网-SQL专项练习2的更多相关文章

  1. MySql面试题、知识汇总、牛客网SQL专题练习

    点击名字直接跳转到链接: Linux运维必会的100道MySql面试题之(一) Linux运维必会的100道MySql面试题之(二) Linux运维必会的100道MySql面试题之(三) Linux运 ...

  2. 牛客网Sql

    牛客网Sql: 1.查询最晚入职的员工信息  select * from employees where hire_date =(select max(hire_date) from employee ...

  3. 牛客网sql刷题解析-完结

    查找最晚入职员工的所有信息 解题步骤: 题目:查询最晚入职员工的所有信息        目标:查询员工的所有信息 筛选条件:最晚入职           答案: SELECT *--查询所有信息就用* ...

  4. Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...

  5. 牛客网sql练习

    一建表语句 /* Navicat MySQL Data Transfer Source Server : test Source Server Version : 50717 Source Host ...

  6. 牛客网sql实战参考答案(mysql版):16-21

    16.统计出当前(titles.to_date='9999-01-01')各个title类型对应的员工当前(salaries.to_date='9999-01-01')薪水对应的平均工资.结果给出ti ...

  7. 牛客网sql实战参考答案(mysql版):1-15

    1.查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为--,mysql为comment) CREATE TABLE `employees ...

  8. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  9. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  10. 牛客网数据库SQL实战解析(31-40题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

随机推荐

  1. C# 常用特性(Attribute)

    目录 指定方法实现的属性MethodImplAttribute 标记不再使用的程序元素ObsoleteAttribute 指定属性或事件的说明DescriptionAttribute 未完待续... ...

  2. python tcp socket 源码分享

    服务端的源码: import socketserver class Handler_TCPServer(socketserver.BaseRequestHandler): ""&q ...

  3. 逆向通达信Level-2 续五 (调试窗口层次结构)

    演示 hierarchy, checkCWnd命令. 窗口层次结构向上追溯寻根.自动识别是否为CWnd对象,并且自动搜索对象指针. 窗口层次结构内容包括: 1.窗口类名 2.窗口实现所在模块 3.窗口 ...

  4. undefined reference to vtable for "xxx::xxx" in QT(已解决)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文发布于 2015-02-09 15:37:25 ...

  5. 【剑指 Offer II 118. 多余的边】并查集求回路

    class Solution { int[] parent; int[] rank; public void init(int n) { parent = new int[n + 1]; rank = ...

  6. 大年学习linux(第五节---目录结构)

    五.目录结构 可以用ls / 查看linux的目录结构 bin data etc lib media opt root sbin sys usr boot dev home lib64 mnt pro ...

  7. 记录--没有await,如何处理“回调地狱”

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 太长不看 不要嵌套使用函数.给每个函数命名并把他们放在你代码的顶层 利用函数提升.先使用后声明. 处理每一个异常 编写可以复用的函数,并把 ...

  8. DevOps迈向标准化,平台工程让开发运维更轻松

    在近一代人的时间里,DevOps 在软件开发和运维领域占据了主导地位.这是一套开发人员都离不开的技能和方法.Pearl Zhu 在 "The Digital Master" 一书中 ...

  9. java 计算两个日期相差工作日天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.DayOfWeek; impo ...

  10. mybatis调用Oracle存储过程 带游标

    存储过程 CREATE OR REPLACE PROCEDURE proc_test2(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code O ...