八、子查询

子查询
 
概念:
    当进行一个查询时,需要的条件或数据要用另外一个select语句的查询结果,         这个select语句就叫子查询。子查询会优先于主查询而执行。
 
 
分类:
  • where型子查询
  • from型子查询
  • exists型子查询
 
-----------------------------------------------------------------------------------
 
WHERE型子查询
 
where型子查询即把内层的sql语句查询结果作为外层sql查询的条件
他有如下注意事项:
  • 子查询要包含在括号内。
  • 建议将子查询放在比较条件的右侧。
  • 单行操作符对应单行子查询,多行操作符对应多行子查询。
  • 单行操作符(单行比较运算符(=,>,>=,<,<=,<>)): 右边子查询必须返回的是单个值,
  • 多行操作符(ALL, ANY,IN):右边子查询可以返回多行,但必须是单列, 其中,ALL和ANY运算符必须与单行比较运算符(=,>,>=,<,<=,<>)结合使用
IN
等于任何一个
ALL
和子查询返回的所有值比较。score > ALL(60,70,90)   == 
score > 60 && score > 70 && score > 90;
ANY
和子查询返回的任意一个值比较。score > ANY(60,70,90) == score > 60 or score > 70 or score > 90;
EXISTS
判断子查询是否有返回结果(不关心具体行数和内容),如果返回则为TRUE,否则为FALSE。
IN
 
 
 
EXISTS
 
 
 
ANY
 
 
 
ALL
 
 
 
 
----------------------------------------------------------------------------

 

复制表子查询

 
复制表
 
  • 拷贝表结构
        CREATE TABLE newadmin LIKE admin;
 
  • 拷贝表结构和数据(但约束与索引除外)
        CREATE TABLE newadmin  AS   ( SELECT *  FROM admin  )  ;
 
  • 拷贝表结构和数据
        CREATE TABLE newadmin LIKE admin;   
            INSERT INTO newadmin SELECT * FROM admin;
 
  • 跨数据库拷贝表
        CREATE TABLE newadmin LIKE shop.admin;   
           CREATE TABLE newshop.newadmin LIKE shop.admin; 
 
  • 拷贝一个表中其中的一些字段(指定新名),其中一些数据    
         CREATE TABLE newadmin AS   
           (   
            SELECT id, username AS uname, password AS pass FROM              admin  WHERE id<10
           );
 
  • 在创建表的同时定义表中的字段信息。
 
         CREATE TABLE TT
          (
                 eid int primary key auto_increment
           )
           AS
          (
                select employee_id as eid,first_name,last_name,email f                   rom employees
           );
 
----------------------------------------------------------------------------------------------
 
复制数据
 
在 INSERT 语句中加入子查询。不必书写 VALUES 子句。
子查询中的值列表应与 INSERT 子句中的列名对应。
 
  • INSERT INTO emp2
          SELECT * FROM employees WHERE department_id = 90;               (全部字段\列名对应)
 
  • INSERT INTO sales_reps(id, name, salary, commission_pct)
          SELECT employee_id, last_name, salary, commission_pct
          FROM   employees
          WHERE  job_id LIKE '%REP%'; (指定字段)
 
posted @ 2020-10-22 21:26  别把最疼爱的人弄丢了  阅读(118)  评论(0编辑  收藏  举报