精华内容
下载资源
问答
  • 1.子语句查询 1.1子语句查询出来的结果集作为临时表名使用 select * from (select * from person) as aaa; -- as这个起别名关键字是可以省略的 1.2查询最大工资那个人的薪水和姓名 select name, ...

     

    1.子语句查询

     

     

    1.1子语句查询出来的结果集作为临时表名使用

    select * from (select * from person) as aaa; -- as这个起别名关键字是可以省略的

    1.2查询最大工资那个人的薪水和姓名

    select name, salary from person where salary = (select MAX(salary) from person);

    1.3查询工资高于所有人员平均工资的人员

    select * from person where salary > (select avg(salary) from person);

    1.4关键字

    (1)any关键

    (2)all关键字

    (3)some关键字

    (4)exits关键字,subquery是子条件查询的意思

     

    转载于:https://www.cnblogs.com/whylinux/p/9904384.html

    展开全文
  • 多表查询(重点)3.1 内连接3.2 外连接3.3 等值连接3.4 全连接4.子查询 1.更新语句 Update tableName set columnName = ColumnName+x [ and columnName1 = number]; 如果是并列的筛选条件,使用and关键字 修改表中...

    1.更新语句

    Update tableName set columnName = ColumnName+x [ and columnName1 = number];
    如果是并列的筛选条件,使用and关键字

    修改表中 username 为 wangwu 且年龄为23的人张薪资2000;

    update tb1 set salary = salary+2000 
    where username = 'wangwu' and age = 23;
    

    在这里插入图片描述

    2.查询语句

    select * (columnName,columnName)from tableName,tableName
    where 筛选条件:【

    1. 在多个范围内指定
    2. or 或者A条件或者B条件,满足一个即可
    3. and A条件和B条件必须同时满足
    4. between and 区间范围】

    group by 分组 (根据列,把每一种情况分组出来)
    having 分组筛选(一般情况下该语句与聚合函数连用)
    order by 排序(根据字段排序 asc正序(默认) desc倒序)
    limit 分页 MySQL分页

    查询tb1表中薪资大于4000的

    select *
    from tb1
    where salary>4000;
    

    查询tb1表中薪资大于4000小于10000的

    select *
    from tb1
    where salary between 4000 and 10000;
    

    查询名字是lisi的薪水

    select salary
    from tb1
    where username = 'lisi';
    

    注意:

    1. 在group by中,如果要对针对某一个字段进行分组,该字段必须要出现在查询列select中,尤其是要与having连用时。
    2. 如果在使用聚合函数的时候 select Username,Avg(salary) from tableName 这种情况会使用在分组时子查询的方式来解决

    2.1聚合函数

    函数最终会返回一个结果的函数。Max() 最大值, Min() 最小值 ,Avg() 平均值 ,Sum() 求和 ,Count() 计数

    查询最大工资

    select max(salary)
    from tb1;
    

    group by 后面如果跟数字 1,2 ,代表分别指的是第一列和第二列,以次类推
    查询各个部门人数总数大于1 个人

    select * 
    from tb1
    group by 5
    having count(*)>1;
    

    2.2别名

    字段均可以有别名,表也可以
    使用as关键字来决定别名 (as 关键字也可以省略)

    查询tb1表中的员工的 月薪

    select username,salary*12 as '月薪'
    from tb1;
    
    什么时候使用别名?
    1. 使用多表查询中,两表中有相同的字段名称,可以用来区分表中的字段
    2. 表中具有相同字段,为表取别名,区分表
    3. 查询业务中需要的条件在表中不存在,为新查询到的字段命名
    //根据部门进行分组
    select * from tb1 group by depart;
    //根据部门分组 且中年龄大于30的
    select * from tb1 where age<30 group by depart;
    

    查询tb1 表中信息,并按薪资高低(正序)进行输出

    select * 
    from tb1
    order by salary asc;
    

    查询tb1 表中信息,并按薪资高低(倒序)进行输出

    select *
    from tb1 
    order by salary desc;
    

    2.3limit

    用于强制select语句但会指定的记录数
    接受一个或两个参数,但其参数必须是一个整数常量

    检索记录行3-6

    select *
    from tb1
    limit 3,6;
    

    检索从一个偏移量到记录集的结束所有的记录行,可指定第二个参数为-1

    select *
    from tb1
    limit 3,-1;
    

    如果只给定一个参数,他表示返回最大的记录行数
    检索前五行
    换句话说,limit n 等价于limit 0,n

    select * 
    from tb1
    limit 5;
    

    3.多表查询(重点)

    概念:查询多张数据表,from表和表之间用“,”间隔
    分类:

    1. 内连接:inner join(可省略)
      笛卡尔积:相当于是两个集合的全交叉记录
    2. 外连接:left join (左连接),right join(右连接)
    3. 等值连接:带有等值条件筛选的
    4. 全连接:union 和 unionall

    3.1 内连接

    在这里插入图片描述
    inner join 关键字可以忽略
    在这里插入图片描述

    3.2 外连接

    left join :左连接

    select * from a left join b on a.id=b.id;
    以左(a)表为主表,右(b)表作为副表
    如果a表记录数多于b表,以a表作为主要显示的表
    若a表有,而b表没有,则b表记录数用null补充
    若a表没有,而b表有,则不进行显示

    在这里插入图片描述

    right join:右连接

    select * from a right join b on a.id=b.id;
    以右(b)表为主表,左(a)表作为副表
    如果b表记录数多于a表,以b表作为主要显示的表
    若b表有,而a表没有,则a表记录数用null补充
    若b表没有,而a表有,则不进行显示

    在这里插入图片描述

    3.3 等值连接

    带有等值条件的筛选
    在这里插入图片描述

    等效于
    在这里插入图片描述

    3.4 全连接

    full join 关键字是Oracle中的,MySQL中的全连接功能是有union 和unionall 实现的
    在这里插入图片描述

    注意:

    1. 通过union连接的SQL他们分别单独取出的列数必须相同
    2. 不要求合并的表列名称完全相同时,以第一个SQL表列名为准
    3. 使用union时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用union进行合并,而是使用union all进行合并
    4. 被union连接的SQL子句,单个句子中不用写order by ,因为不会有排序效果

    4.子查询

    概念:就是指在一个完整的查询语句中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的编写方式。

    where 子查询: select * from tableName where username=(select)
    in 子查询 :select * from tableName in (select)
    from 子查询:select * from (select * from tableName) as a;

    子查询中顺序:

    1. from
    2. where
    3. group by
    4. having
    5. select
    6. order by
    展开全文
  • mysql查询语句多表关联查询 以及 子查询

    万次阅读 多人点赞 2017-03-28 14:12:15
    mysql(三):mysql查询语句多表关联查询 以及 子查询 1.查询一张表:  select * from 表名; 2.查询指定字段:select 字段1,字段2,字段3….from 表名; 3.where条件查询:select 字段1,字段2,字段3 ...

    mysql(三):mysql查询语句 和 多表关联查询 以及 子查询

    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 where age>22;

    4.带in关键字查询:select 字段1,字段2 frome 表名 where 字段 [not]in(元素1,元素2);
    例:select * from t_student where age in (21,23);
           select * from t_student where age not in (21,23);

    5.带between and的范围查询:select 字段1,字段2 frome 表名 where 字段 [not]between 取值1 and 取值2;
    例:select * frome t_student where age between 21 and 29;
           select * frome t_student where age not between 21 and 29;

    6.带like的模糊查询:select 字段1,字段2… frome 表名 where 字段 [not] like ‘字符串’;
        “%”代表任意字符;
        “_”代表单个字符;
    例:select * frome t_student where stuName like ‘张三”;
           select * frome t_student where stuName like ‘张三%”;
           select * frome t_student where stuName like ‘%张三%”;//含有张三的任意字符
           select * frome t_student where stuName like ‘张三_”

    7.空值查询:select 字段1,字段2…frome 表名 where 字段  is[not] null;

    8.带and多条件查询:
    select 字段1,字段2…frome 表名 where 条件表达式1 and 条件表达式2 [and 条件表达式n]
    例:select * frome t_student where gradeName=’一年级’ and age=23;

    9.带or的多条件查询
    select 字段1,字段2…frome 表名 where 条件表达式1 or 条件表达式2 [or 条件表达式n]
    例:select * frome t_student where gradeName=’一年级’ or age=23;//或者,条件只要满足一个

    10.distinct去重复查询:select distinct 字段名 from 表名;

    11.对查询结果排序order by:select 字段1,字段2…from 表名 order by 属性名 [asc|desc]
    例:select * frome t_student order by age desc;//降序,从大到小
           select * frome t_student order by age asc;//升序,asc默认可以不写

    12.分组查询group by
    group by 属性名 [having 条件表达式][with rollup]
    1.单独使用(毫无意义,不能单独使用);

    2.与group_concat()函数一起使用;
    例:select gradeName,group_concat(stuName) from t_student group by gradeName;


    3.与聚合函数一起使用;
    例:select gradeName,count(stuName) from t_student group by gradeName;


    4.与having一起使用(显示输出的结果);
    例:select gradeName,count(stuName) from t_student group by gradeName having count(stuName)>3;

    5.与with rollup 一起使用(最后加入一个总和行);
    例:select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;

      
    13.limit 分页查询:select 字段1,字段2,…from 表名 limit 初始位置,记录数;
    例子:select * from t_student limit 0,5;



                 多表连接查询

    表一:t_book



    表二:t_bookType


    表三:t_priceLevel



    select * from t_book,t_bookType;


    1.内连接查询(两张或以上的表连接起来查询需要的数据)
    根据表一的bookTypeId查询出所有bookTypeName
    select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;


    查询某几个字段:
    select bookNme,author from t_book,t_bookType where t_book.bookTypeId=t_bookType.id;



    2.外连接查询(两张或以上的表连接起来查询某张表的信息)

    3.左连接查询
    select * from t_book left join t_bookType on t_book.bookTypeId=t_bookType.id;
    如下图:表一(左边表)t_book的数据全部查出 表二没有的字段用null代替



    4.右连接查询
    select * from t_book right join t_bookType on t_book.bookTypeId=t_bookType.id;
    查出表二(右边表)的所有信息,表一没有的用null代替



    5.多条件连接查询
    select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70;




    子查询
    1.带in关键字的子查询(一个查询语句的条件可能落在另一个select语句的查询结果中)
    select * from t_book where bookType in(select id from t_bookType);
    select * from t_book where bookType not in(select id from t_bookType);

    2.带比较运算符的子查询(子查询可以使用比较运算符)
    select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);

    3.带exists关键字的子查询(加入子查询查询到记录,则进行外层查询,否则,不执行外层查询)
    select * from t_book where exists(select * from t_booktype);
    select * from t_book where not exists(select * from t_booktype);

    4.带any关键字的子查询(any关键字表示满足其中任一条件)
    select * from t_book where price>= any(select price from t_priceLevel);

    5.带all关键字的子查询(all关键字表示满足所有条件)
    select * from t_book where price>= all(select price from t_priceLevel);


    合并查询

    1.union
    使用union关键字是,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录;
    select id from t_book union select id from t_bookType;

    2.union all
    使用union all,不会去除掉重复的记录;
    select id from t_book union all select id from t_bookType;

    展开全文
  • php mysql 多表查询子查询语句

    千次阅读 2018-11-10 23:37:29
    所谓子查询语句,就是先通过一个语句来查询出一个结果,然后再通过一个查询语句从这个结果中再次查询。子查询语句一般有以下3种。下面以一个案例来做讲解。 案例:查询【例1】中每个分类下的最新的那一条商品信息。...

    所谓子查询语句,就是先通过一个语句来查询出一个结果,然后再通过一个查询语句从这个结果中再次查询。子查询语句一般有以下3种。下面以一个案例来做讲解。

    案例:查询【例1】中每个分类下的最新的那一条商品信息。

    如果通过单句查询,是获取不到的。如下面这样是错误的:

    select max(goods_id),cat_id,goods_name from goods group by cat_id;

    这样获取到了每个分类的最新商品ID号goods_id,但是其它信息如goods_name商品名称却是旧的那一条。所以,要想获取到每个分类的最新商品信息,要么分开语句查询,要么用子查询。

    1:where子查询语句。

    select * from goods where goods_id in ( select max(goods_id) from goods group by cat_id);

    这句代码,我们先用group by查询出每个分类的最新的商品ID,然后通过where...in () 条件语句查询出每个分类最新商品ID 的商品的信息。这里是把group by语句作为where的子查询语句。

    2:from子查询语句。

    select * from (select * from goods order by cat_id,goods_id desc) as gk group by cat_id;

    From子查询就是把 select查询到的结果作为一张表,如上面加粗的代码。注:必须把select查询到的结果集 取一个别名,如上面代码中的红色部分。否则会报错。

    这样,我们同样查询出了每个分类下最新商品的信息。

    3:exists子查询语句:

    题目:查询【例1】哪些栏目下有商品。分类表名:category

    select * from category where exists( select * from goods where goods.cat_id=category.cat_id )

    上句中的exists排查了(当商品表中的分类ID=分类表中的分类ID)时,有没有商品。如果有,就再查询这个分类的信息,如查没有,就排除这个分类。最后结果就是,查询出了有商品的商品分类信息。

    嗯,这里我们介绍了3种比较常用的mysql数据库子查询语句:where子查询语句、from子查询语句、exists子查询语句。当然,如果你不想使用子查询语句,也可以把它们拆分成2个语句来执行,效果也是一样的。

     

    转载:http://wanlimm.com/77201808176609.html

     

    展开全文
  • 1.利用FROM子句进行多表查询:select kjbdsjk.编号,kjbdsjk.姓名,kjbdsjk.职业,duobiao.收入 from kjbdsjk,duobiao where kjbdsjk.编号 = duobiao.编号 and duobiao.收入 >3000 2.合并多个结果集:select 编号,姓名,...
  • 一、查询语句 1、查询一张: select * from 表名; 2、查询指定字段: select 字段1,字段2,字段3,… from 表名; 3、where条件查询: select 字段1,字段2,字段3 from 表名 where 条件表达式; 4、in...
  • # ### part1 单表查询 # sql 查询语句的完整语法: """select .. from .. where .. group by .. having .. order by .. limit ..""" # 一.where 条件的使用 """功能: 对表中的数据进行筛选和过滤""" """ 语法:...
  • 这种查询方式基本不会使用,原因就是这种查询方式得到的是两个的乘积(笛卡儿集) 语法就是select * from a,b; 内连接查询,可以有效的去除笛卡尔集现象 内连接查询分为两类: 隐式内连接 select * from A,B ...
  • select语句学习 . 创建create table user(user varchar2(20), id int);. 查看执行某条命令花费的时间set timing on;. 查看的结构desc 表名;. 查询所有列select * from 表名;. 查询指定列select 某列名1,某...
  • 一、简单查询:1.基本语法:SELECT * FROM tb_name;//查询全部 SELECT field1,field2 FROM tb_name;... //选择说明:FROM子句: 要查询的关系 、其它SELECT语句WHERE子句:布尔关系表达...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,118
精华内容 1,247
关键字:

多表查询子查询语句