sql查询语句学习,多表查询和子查询以及连接查询

一、交叉连接查询

  这种查询方式基本不会使用,原因就是这种查询方式得到的是两个表的乘积(笛卡儿集)

  语法就是select * from a,b;

  

二、内连接查询,可以有效的去除笛卡尔集现象

 内连接查询分为两类:

隐式内连接 select * from A,B where 条件

隐式连接使用别名:select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;

显示内连接 select * from A inner join B on 条件 (inner可以省略)

显示连接使用别名: select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx

三、外连接

 外连接有两种方式,一种是左外连接,一种是右外连接

左外连接:select * from A left outer join B on条件

右外连接:select * from A right out join B on 条件

左外连接就是左边的表的内容全部显示,然后匹配右边的表,如果右边的表匹配不到,则空

右外连接就是右边的表的内容全部显示,然后匹配左边的表,如果左边的表匹配不到,则空

四、子查询:

  子查询就是查询中还有查询,就是一条select语句结果作为另外一条select语法的一部分(查询结果,查询条件,表等)

子查询的用处很多比如:查询本公司工资最高的员工的详细信息

select * from emp where sal=max(sal)这个是错误的,原因是聚合函数不可以用在条件中,要想解决这个问题,只能用子查询

select* from emp where sal=(select max(sal)from emp)

exists关键字

select * from emp where exists(select max(sal) from emp)

这句话的意思是只要(select max(sal) from emp)有结果则执行select * from emp,否则不执行

子查询出现在where后是作为条件出现的

子查询出现在from之后是作为表存在的

作为表举例 select e.emono,e.ename from(select * from where deptno=30) e

还给表起了一个别名e

作为条件有以下几种情况

单行单列:可以使用=,>,<,>=,<=,!=

多行单列(集合)可以用All ANY IN not IN

单行多列(对象),就是一行,像一个对象一样什么属性都有

多行多列:多行多列一直用在from后面作为表

单行单列举例:select * from emp where sal >(select avg(sal) from emp)

多行多列举例:select * from emp where sal> All(select sal from emp where deptno=10)

单行多列举例:select * from emp where(job,deptno,sal)IN(select job,deptno,sal from emp where ename=‘殷天正‘);(查询和殷天正一样工作,工号,工资的人的工作,工号,工资从emp表中)

五、总结

  内连接就是两个表的交集

  左外连接就是左边表加两表交集

  右外连接就是右边表加两表交集

  

原文地址:https://www.cnblogs.com/houniaodetiankong/p/9165057.html

时间: 2024-08-25 03:42:58

sql查询语句学习,多表查询和子查询以及连接查询的相关文章

mysql查询语句 和 多表关联查询 以及 子查询

原文地址: http://blog.csdn.net/github_37767025/article/details/67636061 1.查询一张表: select * from 表名: 2.查询指定字段:select 字段1,字段2,字段3-.from 表名: 3.where条件查询:select 字段1,字段2,字段3 frome 表名 where 条件表达式: 例:select * from t_studect where id=1; select * from t_student wh

查询语句 select [单表操作]

---SQL单表简单查询1.单表操作&别名的使用 1 --查询表的所有数据:select * from 表名;通配符*代表所有 2 select * from emp; 1 --查询表中指定字段的值:select 字段名1,字段名2,... from 表名; 2 select empno,ename,job,sal,hiredate,comm from emp; 1 --查询结果中的字段使用别名:作用[方便查看查询结果] 2 --在字段名后使用关键字 字段名 as "别名" 3

Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页

GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group by deptno; --根据部门分组,并统计 Select deptno, count(*) form emp group by deptno; select deptno, avg(sal) from emp group by deptno; --每个部门的平均工资 HAVING子句 用于指定

mongodb的查询语句学习摘要

看了些资料,对应只需要知道怎么查询和使用mongodb的我来说,这些足够啦. 左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * from users db.users.find({"age" : 27}) select * from users where age = 27 db.users.find({"username" : "joe", "age" :

SQL UPDATE 语句:更新表中的记录语法及案例剖析

SQL UPDATE 语句 UPDATE 语句用于更新表中的记录. SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. SQL UPDATE 语法 UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value; 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新.如果您省略了 WHERE 子句,所有的记录都将被

SQL DELETE 语句:删除表中的记录语法及案例剖析

SQL DELETE 语句 DELETE 语句用于删除表中的记录. SQL DELETE 语句 DELETE 语句用于删除表中的行. SQL DELETE 语法 DELETE FROM table_name WHERE some_column=some_value; 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除.如果您省略了 WHERE 子句,所有的记录都将被删除! 演示数据库 在本教程中,我们将使用 样本数据库. 下面是选自 "W

sqlserver 查询 inner join 同一表2次 只出一条查询结果

inner join T_MTN_MobileNumber k on 1=1 and k.hddm='01' inner join (select a.hdxx+','+b.hdxx as hdxx from T_MTN_MobileNumber a cross join T_MTN_MobileNumber b where a.hddm='02' and b.hddm='03') m on 1=1

SQL -- 简单语句学习总结7条

/**1.Create table guestbook**/ --if object_id('guestbook') is  null --CREATE TABLE guestbook (id int PRIMARY KEY, visitor VARCHAR(40),comments TEXT,entrydate DATETIME) /**2.Insert data into table guestbook**/ --insert into guestbook values(3,'a','123

MySQL学习——SQL查询语句(连接查询&amp;子查询)(三)

一:连接查询: 连接查询是将俩个或者俩个以上的表按照某个条件连接起来,从中选择需要的数据,连接查询同时查询俩个或者俩个以上的表时使用,当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表,例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号,那么可以通过学生表中的course_id字段与课程表中的num字段来进行连接查询,连接查询包括内连接查询和外连接查询. 1.1 内连接查询 内连接查询是一种常用的连接查询,内连接查询可以查询俩个或者以上