SQL Server 2005系列教学(6) 多表操作及子查询

news/2024/7/8 0:15:08
多表查询;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

人事表:                                                               公司表:
姓名    性别    年龄
姓名    公司     地址
张三           25
李四           25
张三    新浪      北京
李四    网易      广州
显示两个表的所有信息怎么办?
第一种方法:就是笛卡尔乘积,总数=a表的记录数*b表的记录数
第二种方法 join on 连接

内连接:表中行与行之间的相互连接,仅包含满足连接条件的记录行

 

 

举例;显示人事表和公司表中职工的所有信息。
Select 人事表.姓名,人事表.性别,人事表.年龄,公司表.公司,公司表.地址 from 人事表 join 公司表  on 人事表.姓名=公司表.姓名
外连接分为三种:
左外连接:LEFT JOIN    输出左表的所有行,如果左表的某行在右表中没有匹配行,则在右表的列均为空值。

右连接接:RIGHT JOIN  将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

全外连接:FULL JION    外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则为空值。

联合:使用UNION 合并多个查询结果

要使用UNION合并两个查询结果集必须满足以下几个条件:
所有查询中的列数和列的顺序必须相同。
要合并的数据类型必须兼容,即类型可以不同,但必须可以转换。
合并查询结果的字段名称以第一个查询结果的字段名为准,其他查询结果集的字段名称将被忽略。
子查询

子查询是嵌入到一个外部查询中的select语句。那么这个语法就很简单了:

 

注意:内层查询称为子查询,子查询必须必括号括起来。

执行顺序:先执行内层查询,将内层查询的结果返回给外层查询。

        再次执行外层查询。

 

 

 

SELECT 语句可以嵌套在其他许多语句中,例如SELECTINSERTUPDATE 或者DELETE,这些嵌套的SELECT 语句就是子查询。当一个查询依赖于另外一个查询的结果时,就可以使用子查询。

在使用子查询时,必须用括号把子查询括起来,以便区分外查询和子查询
对于教学数据库的三个基本表
学生 S(S#,SNAME,AGE,SEX) 学习 SC(S#,C#,GRADE)  课程 C(C#,CNAME,TEACHER)
试用SQL的查询语句表达下列查询:
1)检索LIU老师所授课程的课程号和课程名。
SELECT C#CNAME  FROM C WHERE TEACHER=LIU
2)检索年龄大于23岁的男学生的学号和姓名。
SELECT S#SNAME FROM S WHERE (AGE>23) AND (SEX=M)
3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
SELECT SNAME FROM S WHERE SEX=F AND S# IN (SELECT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER=LIU)
4)检索WANG同学不学的课程的课程号。
SELECT C# FROM C WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG'))
5)检索至少选修两门课程的学生学号。
SELECT S# FROM SC HAVING COUNT(C#)>2
6)检索全部学生都选修的课程的课程号与课程名。
SELECT C#,CNAME FROM C WHERE NOT EXISTS (SELECT * FROM S WHERE NOT EXISTS  (SELECT * FROM SC WHERE SC.S#=S.S# AND SC.C#=C.C#))
7)检索选修课程包含LIU老师所授课的学生学号。
 SELECT S#   FROM S  WHERE S# IN  (SELECT S#  FROM SC  WHERE S.S#=SC.S# AND C# IN  (SELECT C#  FROM C  WHERE TEACHER='LIU'))

 

 

表名: people:

 

编号
姓名
性别
职务
工资
部门
0001
经理
3000
人事
0002
主任
2000
IDC
0003
工程师
3000
IDC
0004
主管
2600
人事
找出工资比所在部门平均工资高的那个人

http://lihuaxi.xjx100.cn/news/257223.html

相关文章

《创新者》读书笔记 PB16110698 第五周(~4.5)

本周我阅读了某同学推荐的《创新者》&#xff0c;这本书实际上是两个世纪以来信息技术的编年史&#xff0c;从巴贝奇的差分机到如今互联网时代的超级计算机&#xff0c;作者通过各个时代里一位位杰出的创新者&#xff0c;将计算机诞生、发展、崛起和蓬勃的历程娓娓道来。从一篇…

Github标星13.6k!一行代码从PDF提取Excel文件

Datawhale干货 开源技术&#xff1a;OCR开源技术我们在工作生活中经常会遇到表格识别的问题&#xff0c;比如导师说&#xff0c;把下面PDF文件里面的表格取出来整理成Excel表。只要稍微会一点Python&#xff0c;这个开源项目神器几行代码解决&#xff01;使用展示版面分析表格识…

【C#串口编程计划】C#串口协议解析 -- 文本数据

本文介绍了利用C#接收串口数据&#xff08;文本&#xff09;并进行分析的标准过程。

one pragmatical sqlhelper

namespace ConsoleApplication2 {using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;public class SqlHelper{/// <summary>/// 连接字符串/// </summa…

牛客网:为什么不能将实数作为 HashMap 的 key?

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典1.起因让我关注到这一点的起因是一道题:牛客网上的max-points-on-a-line题目是这么描述的:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.大意就是给我一些点的…

「摸鱼」神器来了,Python 实现人脸监测制作神器

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 最近都在讨论工作摸鱼&#xff0c;网易云音乐也出了合理摸鱼时间表&#xff0c;今天给大家推荐如何用python实现摸鱼~码住呦&#xff01; 引言&#xff1a;脸部表情是人类情绪的最直接外部表现之一和进…

冲上热搜!清华95后博士,搞科研演绎浪漫爱情故事获赞千万

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文系募格课堂整合&#xff0c;参考来源&#xff1a;清华大学、中国新闻周刊、辽沈晚报、微博从清华本科毕业到博士后&#xff0c;他可以是拿过奥赛金牌、做起实验训练有素…

【C#串口编程计划】通信协议解析 -- byte[]与常用类型的转换

刚刚完成一个串口通讯的系统。目前在把串口通信的代码整合到团队的类库中&#xff08;把串口通信与网口Soket通讯整合起来&#xff0c;后面只需要配置参数&#xff0c;就可实现网络与串口通讯的转换&#xff09;&#xff0c;故C#串口编程计划的最后一篇图文“C#通讯类库框架”还…