精华内容
下载资源
问答
  • SQL语句多表连接查询语法

    万次阅读 2019-07-28 09:32:13
    总结:内连接就是两个的交集 ,左外连接就是左边加两交集 ,右外连接就是右边加两交集 ...SQL语句:select * from student left join score on student.Num=score.Stu_id; 2.右连接 right join 或 r...

     

     

    总结:内连接就是两个表的交集 ,左外连接就是左边表加两表交集 ,右外连接就是右边表加两表交集

     

     

    一、外连接

    1.左连接  left join 或 left outer join

    SQL语句:select * from student left join score on student.Num=score.Stu_id;

    2.右连接  right join 或 right outer join

    SQL语句:select * from student right join score on student.Num=score.Stu_id;

    3.完全外连接  full join 或 full outer join

    SQL语句:select * from student full join score on student.Num=score.Stu_id;

    通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。

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

    语法就是select * from a,b;则尽量不使用此语句,产生的结果过于繁琐。

     

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

    内连接查询分为两类:

     

    二、内连接 

    join 或 inner join

    SQL语句:select * from student inner join score on student.Num=score.Stu_id;

    此时的语句就相当于:select * from student,score where student.ID=course.ID;

     

    内连接查询分为两类:

    隐式内连接

    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

    举例:

    三、交叉连接

    cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

    SQL语句:select * from student cross join score;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • SQL语句多表关联查询语法

    千次阅读 2021-03-03 10:11:37
    **sql语句多表关联查询语法** 一、外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student.Num=score.Stu_id; 2.右连接 right join 或 right outer join SQL...
                           **sql语句多表关联查询语法**
    

    一、外连接

    1.左连接 left join 或 left outer join

    SQL语句:select * from student left join score on student.Num=score.Stu_id;

    2.右连接 right join 或 right outer join

    SQL语句:select * from student right join score on student.Num=score.Stu_id;

    3.完全外连接 full join 或 full outer join

    SQL语句:select * from student full join score on student.Num=score.Stu_id;

    通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。

    而对于select * from student,score;则尽量不使用此语句,产生的结果过于繁琐。

    二、内连接

    join 或 inner join

    SQL语句:select * from student inner join score on student.Num=score.Stu_id;

    此时的语句就相当于:select * from student,score where student.ID=course.ID;

    三、交叉连接

    cross join,没有where指定查询条件的子句的交叉联接将产生两表的笛卡尔积。

    SQL语句:select * from student cross join score;

    四、结构不同的表连接

    当两表为多对多关系的时候,我们需要建立一个中间表student_score,中间表至少要有两表的主键。

    SQL语句:select s.Name,C.Cname from student_score as sc left join student as s on s.Sno=sc.Sno left join score as c on c.Cno=sc.Cno

    select C_name,grade from student left join score on student.Num=score.Stu_id where name=‘李五一’;
    红色部分即中间表,是集合两表所有内容的一张总表。

    五、UNION操作符用于合并两个或多个select语句的结果集。

    UNION内部的SELECT语句必须拥有相同数量的列,每个列也必须拥有相似的数据类型,每条SELECT语句中的列的顺序必须相同。

    select Num from student union select Stu_id from score;
    union操作符是默认查重的,如果允许重复的值,就可以使用union all 。对于两张结构相同的表,union也可以把他们合并成一张表:

    select * from student1 union select *from student2;
    六、子查询

    有时候,查询时需要的条件是另外一个select语句的结果,就会使用到子查询。

    1.带IN关键字的子查询

    SQL语句:select * from student where Num IN(select Stu_id from score);

    2.带EXISTS关键字的子查询

    exists内查询返回一个真价值,若返回true时,外查询进行查询,否则外查询不进行查询。

    SQL语句:select * from student where exists(select * from score where C_name=‘计算机’);

    3.带ANY关键字的子查询

    使用ANY关键字只要有一个满足,就通过该条件来执行外查询。

    SQL语句:select sname,(date_format(from_days(now())-to_days(birthday)),’%Y’)+0) as ‘年龄’ from student where birthday>ANY(select birthday from student where bumen=‘计算机系’);

    4.带ALL关键字的子查询

    使用ALL关键字必须满足所有的内层查询语句返回的所有结果,才执行外查询

    SQL语句:select sname,(date_format(from_days(now())-to_days(birthday)),’%Y’)+0) as ‘年龄’ from student where birthday>ALL(select birthday from student where bumen=‘计算机系’);

    展开全文
  • ORACLE分页查询SQL语句(最有效的分页)

    万次阅读 多人点赞 2018-11-01 16:18:24
    ** 一、效率高的写法 ** 1.无ORDER BY排序的写法。...即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ...

    一、效率高的写法

    1.无ORDER BY排序的写法。(效率最高)
    (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM emp t
    
             WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                 AND TO_DATE ('20060731', 'yyyymmdd')
    
               AND ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    2.有ORDER BY排序的写法。(效率较高)
    (经过测试,此方法随着查询范围的扩大,速度也会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT t.*
    
                        FROM emp t
    
                       WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                           AND TO_DATE ('20060731', 'yyyymmdd')
    
                    ORDER BY create_time DESC, emp_no) tt
    
             WHERE ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    二、效率垃圾但又似乎很常用的分页写法

    3.无ORDER BY排序的写法。(建议使用方法1代替)
    (此方法随着查询数据量的扩张,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060731', 'yyyymmdd')) table_alias
    
     WHERE table_alias.rowno <= 20 AND table_alias.rowno >= 10;
    
    --TABLE_ALIAS.ROWNO  between 10 and 100;
    

    4.有ORDER BY排序的写法.(建议使用方法2代替)
    (此方法随着查询范围的扩大,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt) table_alias
    
     WHERE table_alias.rowno BETWEEN 10 AND 20;
    

    5.另类语法。(有ORDER BY写法)
    (语法风格与传统的SQL语法不同,不方便阅读与理解,为规范与统一标准,不推荐使用。)

    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, tt.*
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt
    
             WHERE ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    
     
    
    --6另类语法 。(无ORDER BY写法)
    
    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060531', 'yyyymmdd')
    
               AND ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    

    三、分析

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。

    分页查询格式:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    

    其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。

    上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。

    选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a)
    
     WHERE rn BETWEEN 21 AND 40
    

    对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

    而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

    上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

    这里就不对包含排序的查询进行说明了,下一篇文章会通过例子来详细说明。

    下面简单讨论一下多表联合的情况。

    对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

    因此,如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    
    展开全文
  • SQL语句查询语句完整语法

    万次阅读 多人点赞 2017-03-21 21:28:45
    完整语法是: Select [select选项] 字段列表[字段别名]/* from 数据源 [where 字句] [group by子句 ][having 子句][order by 子句][limit 子句]; ①[select选项]: Select 选项包含:ALL(所有,默认)、dis

    数据库是mysql,使用的数据库表名称是my_student.

    表的完整数据信息是:


    完整语法是:

    Select [select选项] 字段列表[字段别名]/* from 数据源 [where 字句] [group by子句 ][having 子句][order by 子句][limit 子句];

    ①[select选项]:

    Select 选项包含:ALL(所有,默认)、distinct(去重)。其中distinct针对的是查询结果的整条记录而言的。

    select DISTINCT(sex) from my_student;


    select DISTINCT(sex),name from my_student; 和 selectDISTINCT sex,name from my_student;结果是一样的。


    ②[where 字句]:where是唯一一个从磁盘开始拿数据的时候就开始进行判断的条件,从磁盘取出一条记录,开始进行where判断,判断结果如果成立,那么取出结果保存到内存,否则放弃。

    select * from my_student where name = '哈哈1';


    ③[group by 子句 ]:分组子句,group by子句主要的作用是分组,从而进行统计操作,而不是为了展示(展示的时候,只会展示分组记录的第一条记录),分组时,一般会结合使用count()、max()、min()、avg()、sum()函数。

    A、单子段分组:

    selectc_id,count(*),max(height),min(height),avg(height),sum(age) from my_studentgroup by c_id ;


    sql语句的意思是:my_student表以c_id进行分组,然后显示分组后的每组的c_id名称、每组的总数、每组的最高、最低、平均身高和每组的年龄总和。

    B、多字段分组

    select c_id,sex,count(*),max(height),min(height),avg(height),sum(age)from my_student group by c_id ,sex;


    表示的含义是,对整个表先按照c_id进行分组,然后在此分组的基础之上,然后每组再按照sex,进行分组。

    C、多字段分组(加上显示每组的某一字段的所有数据)

    selectc_id,sex,count(*),max(height),min(height),avg(height),sum(age) ,GROUP_CONCAT(name)from my_student group by c_id ,sex;


    ④[having 子句]:having的作用类同where,而且having能做几乎所有where能做的事情,而where却不能做having能做的很多事情,主要是因为

    where只能在磁盘提取数据的时候对数据进行操作;而在内存中对数据进行group by分组之后的结果进行处理,只能通过having。

    selectc_id,count(*),max(height),min(height),avg(height),sum(age) from my_studentgroup by c_id having COUNT(*) >= 3;


    ⑤[order by 子句]:对数据进行排序操作,根据某个字段进行升序或者降序排序。(进行多字段排序的时候,先根据某一字段进行潘旭,然后在排序好的内部再按照某字段进行排序)

    A、单个字段的排序:

    select * from my_student order by c_id;


    B、多字段排序

    select * from my_student order by c_id,sex;


    ⑥[limit 子句]:限制结果的数量。Limit 偏移量  记录条数;

    A、select * frommy_student limit 2;


    B、select * frommy_student limit 0,3;


    展开全文
  • SQL语句多表联合查询

    万次阅读 2017-03-18 12:25:57
    本周之前,对于数据库的使用仅限于简单的增删改查(insert、delete、updata、select),而这一周由于工作需要,对一些sql函数、sql语句多表联合查询、T-SQL语句基本语法、存储过程编写等有了简单的学习,现将一周所...
  • SQL 语句多表查询方式

    万次阅读 2017-11-28 17:58:08
    SQL 语句多表查询方式  例如:按照 department_id 查询 employees(员工)和 departments(部门) 的信息。 方式一(通用型):SELECT ... FROM ... WHERE SELECT e.last_name,e.department_id,d.department_name ...
  • DB2中常用sql语句语法

    万次阅读 2016-06-03 18:26:23
    DB2 提供了关连式资料库的查询语言sql(structured query language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(ddl)以及资料的...
  • ORACLE 多表关联查询SQL 语法结构梳理

    千次阅读 2013-11-09 15:25:05
    ORACLE 多表链接查询SQL语法有两种,一种是标准SQL多表联查语句结构(left join | right join ...),一种是ORACLE自身多表联查语句结构(使用"+") 1、标准SQL多表链接查询(以oracle自带emp,dept为例): --标准...
  • SQL条件查询Sql语句

    万次阅读 2012-02-10 11:07:57
    DECLARE @startIndex INT, --用来判断的变量 @ordertype NVARCHAR...@SqlBase NVARCHAR(500) --最终的sql语句 SELECT @startIndex=3 SELECT @ordertype=CASE --根据条件组合sql语句 WHEN @startIndex=1 THEN 'OR
  • Oracle数据库的多表关联查询SQL语句

    千次阅读 2018-10-16 11:41:02
    转至 数据库(学习整理)----7--Oracle多表查询,三种join连接 ======================= 聚合函数:(都会忽略null数据) 常用的有5种:将字段中所有的数据聚合在一条中 1、sum(字段名) :求总和 2、avg...
  • SQL语法(五) 多表联合查询

    万次阅读 多人点赞 2018-09-09 09:00:01
    当需要获取的数据分布在张中,考虑使用联合查询,本章将学习两种查询方式(sql92/sql99) 范例 1.笛卡儿积 将的数据进行一一对应,所得到结果为多表的笛卡尔积。结果的数量为所有的数量的乘积。 --...
  • 1、查询testtable中姓名为"张三"的nickname字段和email字段 SELECT nickname,email FROM testtable WHERE name=张三 2、显示testtable中所有列的数据 SELECT * FROM testtable 3、选择部分列并指定它们的...
  • Mysql单多表SQL语句(DQL)

    千次阅读 2018-03-30 16:45:29
    第1章 SQL语句(DQL)1.1 DQL准备工作和语法1.1.1 准备工作#创建商品:create table product( pid int primary key, pname varchar(20), price double, category_id varchar(32));INSERT INTO product(pid,...
  • JAVA中SQL查询语句大全,select多表查询,各种查询

    万次阅读 多人点赞 2019-03-05 20:04:42
    以员工:emp 为例 id name gender birthday dept job sal bonus 编号 姓名 性别 ...基本查询查询emp中的所有员工信息 ...– 查询emp中的所有员工的姓名、薪资、奖金 ...– 查询emp中...
  • 动态SQL语句语法

    万次阅读 2013-11-14 22:16:43
    动态SQL是在运行时生成和执行SQL语句的编程方法。动态是和静态相对而言的。静态SQL指的是在代码编译时刻就已经包含在代码中的那些已经充分明确的固定的SQL语句。 PL/ SQL提供了两种方式来编写动态SQL: 本地动态SQL...
  • SELECT m.*,d_name,r_name,m2.m_account as shangji_account FROM Member m,Member m2,Role r,Depart d WHERE m.m_rid=r.id and m.m_did=d.id and m.m_shangji=m2.id ORDER BY m.id DESC ...通常情况下面我们一般每个
  • SQL语句基础-多表连接查询

    千次阅读 2019-06-26 14:23:00
    连接查询介绍 连接查询包括内连接,左外连接,...以下作为示例进行单表查询: Stduent Sno Sname Ssex Sbirthday Sdept Memo Course Cno Cname PreCno Credit Semester SC Sno Cno Grade 具...
  • select 常熟水利枢纽排水量(万方),时间 from 引排水量 where 时间 between '2015/12/14' and '2015/12/22'
  • sql指令和多表关系 ### 1. 排序 (order by) 数据库的查询(排序:order by) 默认是按升序排列的,但是升序ASC最好写上,代码可读性! SELECT * FROM 表名 ORDER BY 排序字段 ASC(升序)|DESC(降序); 如果排序列的值...
  • C#编程之SQL语句语法错误分析(一)

    千次阅读 2012-01-11 12:48:50
    若C#程序代码中的SQL语句涉及到数据库中的date,name,password,pwd之类的字段,一定要加 "[] ",即[date],[name], [password],[pwd],否则会出现例如,“UPDATE 语句语法错误”之类的错误提示。因为date,name,...
  • 使用SQL语句创建 CREATE TABLE 表名  (  字段1 数据类型 列的特征,  字段2 数据类型 列的特征,  ... ) 列的特征: 是否为主键 包括该列是是否为空(NULL) 、是否...
  • PHP中查询sql语句

    千次阅读 2020-01-09 09:44:15
    1:sql查询语句 描述:表示去数据库中指定的内根据条件查询指定的内容。 语法:$sql = “select [信息] from [哪张表] where [查询条件]”; 说明: [信息]有两种写法: 一是 写* 星号,代表查询所有字段对应的信息...
  • SQL语句多表关系)

    万次阅读 2018-03-30 16:55:20
    第1章 多表关系实战1.1 实战1:省和市l 方案1:张表,一对l 方案2:一张,自关联一对 1.2 实战2:用户和角色l 关系...一个客户服务于个联系人 第2章 多表查询CREATE TABLE category ( cid...
  • 断点看下最后的sql到底是什么样子就知道了,另外你可以把这段sql放在查询分析器下面让他帮你检查下语法。2、有条件的话,将监控的值放到MS-SQLserver中执行以下,错误就知道在哪里了。3、可以的话不要用这种拼接方式...
  • 【SQL】SQL语句多表联合查询

    万次阅读 2018-10-19 14:21:01
    SQL语句多表联合查询 CREATE TABLE orders( id int not null primary key identity(1,1), customerName varchar(100), orderDate varchar(100), orderPrice float ); insert into orders(customerName,orderDate,...
  • SQL语句语法顺序和执行顺序

    千次阅读 2018-07-20 15:06:04
    一、语法顺序和执行顺序 ... (1)SQL语句语法顺序:   SELECT[DISTINCT]  FROM  JOIN  ON  WHERE  GROUP BY  HAVING  UNION  ORDER BY  LIMIT  (2)SQL的执行顺序 ...
  • sql语句表查询

    千次阅读 2017-04-09 21:09:02
    语法 SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field1 AND ON table1.field2 compopr table2.field2 OR ON table1.field3 compopr ...也可以通过如下语法嵌套 JOIN 语句
  • SQL语句查询

    万次阅读 多人点赞 2019-01-20 23:53:51
    第1章 SQL语句查询 1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...
  • sql语句练习50题(Mysql版)

    万次阅读 多人点赞 2017-12-19 00:11:31
    习题来源于网络,sql语句是自己写的。欢迎指正。 表名和字段 –1.学生 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程 Course(c_id,c_name,t_id) – –课程编号, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,756
精华内容 132,302
关键字:

多表查询sql语句语法