首页 > 数据库 >牛客网-SQL专项练习2

牛客网-SQL专项练习2

时间:2022-09-07 18:22:33浏览次数:53  
标签:01 06 name 08 练习 牛客 李四 SQL 张三

①从学生信息表(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 与左外连接相反。

标签:01,06,name,08,练习,牛客,李四,SQL,张三
From: https://www.cnblogs.com/liu-myu/p/16666773.html

相关文章

  • Can't Connect to MySQL Server on IP Address (10061) 错误
    一、授权用户远程访问权限用户授权:GRANTALLPRIVILEGESON*.*TO‘root’@’%’;flushprivileges;查看用户访问权限SELECTDISTINCTCONCAT('User:''',user,'''......
  • mysql中find_in_set()函数的使用及in()用法详解
    这篇文章主要介绍了mysql中find_in_set()函数的使用以及in()用法详解,需要的朋友可以参考下 MySQL手册中find_in_set函数的语法解释:FIND_IN_SET(str,strlist)str要......
  • mysql导入:ERROR 1118 (42000): Row size too large (> 8126)
    最近在做数据库还原时候,遇到以下问题ERROR1118(42000)atline79532:Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOBorusingROW_FORMAT=DYN......
  • 牛客网-SQL专项练习1
    ①检索所有比“王华”年龄大的学生姓名、年龄和性别。SELECT语句:解析:第一步:先找到王华的年龄SELECTAGEFROMSWHRESN="王华";第二步:将第一步的结果作为条件进行......
  • MySql使用存储过程拼接sql,查询当前数据与下一条数据时间差,union all合并查询结果集
    1CREATEPROCEDURE`th_line_step_beat_state`(intable_nameVARCHAR(255),inline_idINT,inSOUTIMEdatetime,inDESTIMEdatetime)2BEGIN3--参数(表名,......
  • pgsql函数
    1.字符串替换 selectreplace('替换前字符串','需替换字符串','替换字符串'); 例:把2替换为5  selectreplace('123','2','5'); 2.字符串截取 selectsubs......
  • 【Mysql】MyISAM 和 InnoDB 的区别
    先看下《高性能MySQL》中对于他们的评价:InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的......
  • "蔚来杯"2022牛客暑期多校训练营5
    ADon'tStarve巧妙在于拓扑排序为啥要开滚动数组因为对于长度相同的边我们只能选择一条而这些边属于同一个状态的为了防止更新的时候对同状态的点造成影响#inclu......
  • 3. mysql--Navicat进行ssh通道连接MySQL数据库
    1.Navicat进行ssh通道连接MySQL数据库首先,你得有一个Navicat,这个不用多说第二步,打开Navicat点击连接按钮。这个就不上图了,直接到如下页面填写信息,连接名随便起第三步:点......
  • 二进制安装mysql5.7
    1.安装相关包[root@CentOS8~]#yuminstalllibaionumactl-libs-y2.创建用户和用户组[root@CentOS8~]#groupaddmysql[root@CentOS8~]#useradd-r-gmysql......