Select语句的子查询和多表操作.六
一. 对像的完整表示法。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
语法:服务器名.数据库名.架构名.对象名
Select * from dc.db2.dbo.yuangong
Dbo可以用.代替。
例1.显示邮政编码为空的员工信息。
处理空值;is
Select * from 表名 where 邮政编码 is null
例2.显示手机不为空的。
Select * from 表名 where 手机 is not null
二.子查询
一个查询语句再嵌套一个查询语句。
注意:1.内层查询必须使用()括起来
2.执行的时候,先执行内层查询,得到结果后,将此结果返回给外层查询。最后两个表都有的员工信息。
例1.显示两个表都有的员工信息。
Select * from 表a where 姓名 in (select 姓名 from 表b)
先把表a和表b创建出来。
例2.显示A表有B表没有的员工信息。
Select * from 表a where 姓名 not in (select 姓名 from b)
三.多表操作。
多表连接方法:
(1) 笛卡尔乘积(交叉连接)
(2) Join on 连接
1. 笛卡尔乘积(交叉连接)
语法为:select 字段名列表 from 表名1,表名2……[where条件]
方法一,如:select 员工表.姓名,员工表.性别,年龄,籍贯,公司名称,手机 from 员工表,公司表 where 员工表.姓名=公司表.姓名
默认产生的记录总数=两个数记录的乘积。
在这里创建两个表:员工表,公司表。
例2.join on的分类。
1. 内链接:inner join. 必须是满足条件的记录。
2. 外连接:
3. 左外连接:left join 显示左表的所用记录,如果右表没有与之相对的记录,则相应字段为空。
4. 右外连接:right join 显示右表的所有记录,如果左表中没有与之相对应的记录,则相应字段为空。
5. 全外连接:full join 显示所有表中的记录,如果在另一个表没有与之相对应的记录,则相对应字段为空。
例:内连接。
Select 字段名列表 from 表名1 inner join 表名2 on 条件。
如:以内连接显示员工表和公司表的正确信息。
Select * from 员工表 inner join 公司表 on 员工表.姓名=公司表.姓名
例2.把相同的姓名和性别合为一个。
Select 员工表.姓名,员工表.性别,年龄,公司名称,籍贯,手机 from 员工表inner join 公司表 on 员工表.姓名=公司表.姓名
例3.使用交叉连接和内部连接分别显示三个表的数据。
在这里再创建一个网址表。
(1.)交叉连接。
select 公司表.姓名,公司表.性别,年龄,籍贯,手机,网址 from 公司表,员工表,网址表 where 公司表.姓名=员工表.姓名 and 员工表.公司名称=网址表.公司名
As 对列名或者是表名进行临时命名。
Select 姓名 as name,性别 as sex 年龄 as age from 表名
(2.)内连接:
Select 公司表.姓名,公司表.性别,年龄,公司名称,籍贯,手机,网址 from 公司表 inner join 员工表 on 公司表.姓名=员工表.姓名
Inner join 网址表 on 员工表.姓名=网址表.姓名。
例4:左连接显示员工表和公司表的信息。
Select 公司表.姓名,公司表.性别,年龄,公司名称,籍贯,手机 from 公司表 left join 员工表 on 公司表.姓名=员工.姓名。
例5.以全外连接显示三个表的数据。
select 公司表.姓名,公司表.性别,年龄,公司名称,籍贯,手机 from
公司表 full join 员工表 on 公司表.姓名=员工表.姓名 full join
网址表 on 员工表.姓名=网址表.姓名
四. 数据表的排序。
语法为:select 字段名列表 from 表名 【where条件】 order by 字段名1 asc /desc 【,字段名 asc /desc】……
作用是对满足条件的记录按照字段\进排列,如果字段名的值相同,则按照字段名2排列。
Asc:升序 从小到大
Desc :降序 从大到小
默认的是:asc
例1:按照年龄升序排列。
Select * from 表名 order by 年龄 asc
数值:数字的大小。
汉字:新华字典为标准、
例2.按照部门升序排列,同一个部门的再按照年龄降序排列
Select * from 表名 order by 部门 asc,年龄desc
例3.对男同志的工资进行降序排列。
Select * from 表名 where 性别=‘男’ order by 工资 desc
子查询和多表操作以完成。
转载于:https://blog.51cto.com/guoweishuai/243517