精华内容
下载资源
问答
  • dql关键字
    2013-11-25 17:55:27
    ROW_BASED关键字用于以一行显示一个repeating attribute的一个索引位的值的方式显示DQL语句的返回结果。如果不加此关键字,一行的返回结果一般为一个对象,加此关键字后一个对象会出现多行,总行数为被select的所有repeating attributes中拥有最多值的attribute的值的个数,并且在同一行的各个repeating attributes的值的索引一样。 

    主要使用场合: 
      1)查询语句要返回repeating attribute并且要和表关联进行查询的语句。 
      2)查询语句要返回repeating attribute并且要和其他object type关联进行查询的语句。 
      3)若使用此关键字,查询条件中repeating attribute前可不使用any关键字 
      4)关联查询中可以使用" 别名1 .*"和此关键字来返回 别名1 中所有属性的值, 而不是所有被查询对象的值。 

    注意: 
    This hint may not be used in FTDQL queries or queries that reference a lightweight object type in the FROM clause.
    更多相关内容
  • 一、简介 二、SELECT 三、FROM 四、WHERE 五、COUNT 六、LIMIT 七、LIKE 八、IN 和NOT IN 九、BETWEEN AND 十、GROUP BY 十一、HAVING 十二、ORDER BY 十三、DISTINCT

    一、简介

      学生表创表语句

    CREATE TABLE `tb_student` (
      `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
      `class_code` int NOT NULL DEFAULT '0' COMMENT '所属班级编号',
      `user_code` int unsigned NOT NULL DEFAULT '0' COMMENT '学生编号',
      `user_name` varchar(10) NOT NULL DEFAULT '' COMMENT '学生姓名',
      `gender` char(1) NOT NULL DEFAULT '男' COMMENT '性别',
      `birthday` date NOT NULL DEFAULT '1970-01-01' COMMENT '生日',
      `home_address` varchar(100) NOT NULL DEFAULT '' COMMENT '家庭住址',
      `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_class_user_code` (`class_code`,`user_code`),
      UNIQUE KEY `uk_user_code` (`user_code`),
      KEY `idx_class_code` (`class_code`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1081 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学生信息表';
    

    我们这里有一个表总共有18个班,一个班60个学生。

    二、SELECT

       SELECT 就是选择的意思,此处一般是结果集中的列,如果有多列就用逗号分隔,查询列表的最后一个字段后没有逗号。(英文符号的逗号)

    2.1、查询所有

    select * from tb_student;
    

      不推荐上面这种写法,因为可能实际中会有很多数据的冗余,造成IO压力,推荐列出指定的列,如:

    select id,class_code,user_code,user_name,gender,birthday,home_address,create_time,update_time from tb_student;
    

    2.2、查询指定的列

      有时我们并不需要那么多的信息,比如只想要学号,或者只要基本的信息

    #只查学号列
    select user_code from tb_student;
    #查询学生基本的信息
    select class_code,user_code,user_name,gender,birthday,home_address from tb_student;
    

    2.3、别名

      有时你可能还是看不懂,就给列取个别名mysql里可以直接在列名后面再写一个名字,或者使用AS。

    select 
    	class_code as '班级编号',
    	user_code as '学号',
    	user_name  as '姓名',
    	birthday as '出生年月',
    	home_address as '家庭地址' 
    from tb_student;
    
    +--------------+--------+-----------+--------------+------------------------------------------------------------+
    | 班级编号     | 学号   | 姓名      | 出生年月     | 家庭地址                                                      |
    +--------------+--------+-----------+--------------+------------------------------------------------------------+
    |         3001 |   6080 | 陈晓畅    | 2009-03-07   | 盐田区田心东路9号                                            |
    |         3001 |   6079 | 康又蓝    | 2009-11-30   | 福田区农林路1号                                              |
    |         3001 |   6078 | 蒋芸溪    | 2009-09-07   | 福田区皇岗路莲花一村华富街道办事处综合楼                       |
    |         3001 |   6077 | 王淑慧    | 2009-02-27   | 盐田区东海四街2号盐田街道办事处213室                          |
    |         3001 |   6076 | 朱米琪    | 2009-07-26   | 光明区新湖街道旧围1号                                        |
    +--------------+--------+-----------+--------------+------------------------------------------------------------+
    

    2.4、其他特别使用

      我们还可以用在一些特定的函数或者常量的处理

    select user(), now(), current_date(), current_time(), current_timestamp();
    
    +----------------+---------------------+----------------+----------------+---------------------+
    | user()         | now()               | current_date() | current_time() | current_timestamp() |
    +----------------+---------------------+----------------+----------------+---------------------+
    | root@localhost | 2022-03-04 06:06:12 | 2022-03-04     | 06:06:12       | 2022-03-04 06:06:12 |
    +----------------+---------------------+----------------+----------------+---------------------+
    

      有时导出数据,可能需要固定的一列,就可以类似的用法

    select user_name as '姓名','学生' as '类型' from tb_student;
    
    +-----------+--------+
    | 姓名      | 类型   |
    +-----------+--------+
    | 陈晓畅    | 学生   |
    | 康又蓝    | 学生   |
    | 蒋芸溪    | 学生   |
    +-----------+--------+
    

    三、FROM

       FROM 一般就是从哪个表或者结果集进行操作

    3.1、表

    #从学生表中查询
    select user_code,user_name from tb_student;
    

    3.2、结果集

      这种情况的使用场景是,其他表得出一个结果,然后再对结果集进行过滤。

    #字段1  和  字段2 必须是 查询语句的查出来的列名
    select 字段1,字段2 from (子查询语句) as 结果集的别名;
    

    四、WHERE

       WHERE 就是一个条件过滤,比如要查询,修改或者删除数据,不加条件就是全表操作了。因为有时我们只是操作我们需要的数据,所以这个 WHERE 就是我们的条件了。

    #从学生表中查询学生编号为6080的学生姓名
    select user_name from tb_student where user_code=6080;
    

       WHERE 不仅可以用在查询,还可以用在修改或删除的语句中。

    #更新学生编号为6080学生的生日为2020-12-12
    update tb_student set birthday='2020-12-12' where user_code=6080;
    #删除学生编号为6080学生
    delete from tb_student where user_code=6080;
    

    五、COUNT

       COUNT 可以用来统计符合条件的记录数。

    #使用count(*)查询学生表的学生的总数
    select count(*) from tb_student;
    

    或者使用

    #使用count(非空列)查询学生表的学生的总数
    select count(user_code) from tb_student;
    

      使用count(*),count(列),这两者有区别的,count(*)是统计所有行记录,count(列)一般是非空列的记录,假设有5个学生,有4个学生填了生日,有一个为空,如果这时按照生日这列去统计就结果就是4了,但是如果你按照唯一编号去统计就是5了

    六、LIMIT

      数据库有很多记录,有时我们可能只需要指定的几条, LIMIT 就是限制查询结果的行数。

    6.1、LIMIT m

      查询 m 条记录

    #查询学生表的前5条记录
    select user_code, user_name from tb_student limit 5;
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      6080 | 陈晓畅    |
    |      6079 | 康又蓝    |
    |      6078 | 蒋芸溪    |
    |      6077 | 王淑慧    |
    |      6076 | 朱米琪    |
    +-----------+-----------+
    

    6.2、LIMIT n,m

      查询 m 条记录,但是索引是从 n 开始(数据库查询结果索引是从0开始)

    #查询学生表记录,从1第一条开始(索引是0),查询三条
    select user_code, user_name from tb_student limit 1,3;
    
    +------------+-----------+
    | class_code | user_name |
    +------------+-----------+
    |       3001 | 康又蓝    |
    |       3001 | 蒋芸溪    |
    |       3001 | 王淑慧    |
    +------------+-----------+
    

    七、LIKE

    7.1、LIKE中的( % )

      LIKE中的( % )表示的是任意的意思,可以前面任意,后面任意,或者前后都任意(分别如下):

    • %name
    • name%
    • %name%
    #比如我们查询姓“张”的学生的学号和姓名
    select user_code, user_name from tb_student where user_name like '张%';
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      6023 | 张雪珍    |
    |      5690 | 张梦露    |
    |      5542 | 张悦和    |
    |      5467 | 张妙意    |
    |      5404 | 张香岚    |
    |      5298 | 张娇洁    |
    |      5255 | 张水蓉    |
    +-----------+-----------+
    
    #比如我们查询叫“雨文”的学生的学号和姓名
    select user_code, user_name from tb_student where user_name like '%雨文';
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      6074 | 余雨文    |
    |      5200 | 刘雨文    |
    +-----------+-----------+
    
    #比如我们查询名字中含有“雨”的学生的学号和姓名
    select user_code, user_name from tb_student where user_name like '%雨%';
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      6074 | 余雨文    |
    |      5942 | 崔昕雨    |
    |      5850 | 丁小雨    |
    |      5814 | 丁雨灵    |
    |      5695 | 曹雨竹    |
    |      5651 | 钱雨兰    |
    |      5639 | 田雨旋    |
    |      5521 | 康雨彤    |
    |      5478 | 韩新雨    |
    |      5368 | 陆雨柏    |
    |      5341 | 苏雨真    |
    |      5331 | 胡雨琴    |
    |      5263 | 沈甘雨    |
    |      5244 | 戴雨双    |
    |      5216 | 邹雨筠    |
    |      5200 | 刘雨文    |
    |      5078 | 赵雨云    |
    +-----------+-----------+
    

    7.2、LIKE中的( _

      LIKE中的( _ )表示的是任意一位的意思,只表示一位,和 % 有区别,如果想要表示任意两位就两个下划线。

    #比如我们查询名字中第三个字是“雨”的学生的学号和姓名
    select user_code, user_name from tb_student where user_name like '__雨';
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      5942 | 崔昕雨    |
    |      5850 | 丁小雨    |
    |      5478 | 韩新雨    |
    |      5263 | 沈甘雨    |
    +-----------+-----------+
    
    #比如我们查询名字中第二个字是“雨”的学生的学号和姓名
    select user_code, user_name from tb_student where user_name like '_雨_';
    
    +-----------+-----------+
    | user_code | user_name |
    +-----------+-----------+
    |      6074 | 余雨文    |
    |      5814 | 丁雨灵    |
    |      5695 | 曹雨竹    |
    |      5651 | 钱雨兰    |
    |      5639 | 田雨旋    |
    |      5521 | 康雨彤    |
    |      5368 | 陆雨柏    |
    |      5341 | 苏雨真    |
    |      5331 | 胡雨琴    |
    |      5244 | 戴雨双    |
    |      5216 | 邹雨筠    |
    |      5200 | 刘雨文    |
    |      5078 | 赵雨云    |
    +-----------+-----------+
    

    7.3、LIKE混合使用

    #家庭地址第四到第六位是"观光路"的学生的学号,姓名和具体地址
    SELECT user_code, user_name,home_address FROM tb_student where home_address like '___观光路%';
    
    +------------+-----------+---------------------------+
    | class_code | user_name | home_address              |
    +------------+-----------+---------------------------+
    |       6075 | 史采枫    | 龙华区观光路1199号         |
    |       6059 | 周虹颖    | 龙华区观光路1446号         |
    |       6057 | 卢友桃    | 南山区观光路65号           |
    |       5979 | 梁宛亦    | 龙岗区观光路               |
    +------------+-----------+---------------------------+
    

    八、IN 和NOT IN

    8.1、IN

       IN 表示在指定的值中,如果是字符串则用引号,一般的写法是:

    in(值1,值2,值3...,值n)
    
    #查询学号为3007,3008,3015学生的姓名和住址
    SELECT user_name,home_address FROM tb_student where user_code in(3007,3008,3015);
    
    +-----------+----------------------------------------------+
    | user_name | home_address                                 |
    +-----------+----------------------------------------------+
    | 陈绮烟    | 盐田区大梅沙盐葵路88号                        |
    | 杜晓蕾    | 福田区松岭路56号                              |
    | 余施诗    | 罗湖区东湖路92号东湖街道办事处                 |
    +-----------+----------------------------------------------+
    

    8.2、NOT IN

      和 IN 差不多,只是前面多个 NOT 一般的写法是:

    not in(值1,值2,值3...,值n)
    
    #查询三班(3001)学号不是3007,3008,3015学生的姓名和住址
    SELECT class_code,user_code, user_name FROM tb_student where class_code=3001 and user_code not in(3007,3008,3015);
    
    +------------+-----------+-----------+
    | class_code | user_code | user_name |
    +------------+-----------+-----------+
    |       3001 |      6080 | 陈晓畅    |
    |       3001 |      6079 | 康又蓝    |
    |       3001 |      6078 | 蒋芸溪    |
    |       3001 |      6077 | 王淑慧    |
    |       3001 |      6076 | 朱米琪    |
    |       3001 |      6075 | 史采枫    |
    |       3001 |      6074 | 余雨文    |
    |       3001 |      6073 | 尹滢渟    |
    |       3001 |      6072 | 谢骊艳    |
    |       3001 |      6071 | 吴恬美    |
    |       3001 |      6070 | 唐静珊    |
    |       3001 |      6069 | 宋芳蕙    |
    |       3001 |      6068 | 邹蓉城    |
    |       3001 |      6067 | 萧谷蓝    |
    |       3001 |      6066 | 罗香之    |
    |       3001 |      6065 | 崔愉心    |
    |       3001 |      6064 | 傅燕楠    |
    |       3001 |      6063 | 高北辰    |
    |       3001 |      6062 | 郑雪巧    |
    |       3001 |      6061 | 孔韵诗    |
    |       3001 |      6060 | 唐涵易    |
    |       3001 |      6059 | 周虹颖    |
    |       3001 |      6058 | 杜半雪    |
    |       3001 |      6057 | 卢友桃    |
    |       3001 |      6056 | 魏舒兰    |
    |       3001 |      6055 | 王从霜    |
    |       3001 |      6054 | 薛秀曼    |
    |       3001 |      6053 | 徐初阳    |
    |       3001 |      6052 | 郝灵寒    |
    |       3001 |      6051 | 郭艳蕙    |
    |       3001 |      6050 | 潘安春    |
    |       3001 |      6049 | 罗惜文    |
    |       3001 |      6048 | 顾初雪    |
    |       3001 |      6047 | 余天欣    |
    |       3001 |      6046 | 陆静姝    |
    |       3001 |      6045 | 姜傲南    |
    |       3001 |      6044 | 冯代柔    |
    |       3001 |      6043 | 黄青柏    |
    |       3001 |      6042 | 薛夏青    |
    |       3001 |      6041 | 邱畅然    |
    |       3001 |      6040 | 姜月明    |
    |       3001 |      6039 | 洪敏叡    |
    |       3001 |      6038 | 袁璇玑    |
    |       3001 |      6037 | 郭忆灵    |
    |       3001 |      6036 | 蔡斯乔    |
    |       3001 |      6035 | 韦醉柳    |
    |       3001 |      6034 | 於南莲    |
    |       3001 |      6033 | 侯姣丽    |
    |       3001 |      6032 | 石忆秋    |
    |       3001 |      6031 | 唐欣悦    |
    |       3001 |      6030 | 侯菱凡    |
    |       3001 |      6029 | 郭以南    |
    |       3001 |      6028 | 潘思柔    |
    |       3001 |      6027 | 孙冰蓝    |
    |       3001 |      6026 | 沈寄瑶    |
    |       3001 |      6025 | 袁娟秀    |
    |       3001 |      6024 | 於晓丝    |
    |       3001 |      6023 | 张雪珍    |
    |       3001 |      6022 | 石清妙    |
    |       3001 |      6021 | 吴娴静    |
    +------------+-----------+-----------+
    

    九、BETWEEN AND

      之前 IN 或者 NOT IN 都是具体的值,其实还可以指定范围,比如我们说的 BETWEEN AND ,大概语法是

    between 开始区间 and 结束区间
    
    #查询在2009-02-17到2009-02-22出生的学生的信息
    SELECT user_code, user_name,birthday FROM tb_student where birthday between '2009-02-17' and '2009-02-22';
    
    +-----------+-----------+------------+
    | user_code | user_name | birthday   |
    +-----------+-----------+------------+
    |      6071 | 吴恬美    | 2009-02-17 |
    |      6032 | 石忆秋    | 2009-02-17 |
    |      6013 | 董莺韵    | 2009-02-22 |
    |      5858 | 刘木兰    | 2009-02-19 |
    +-----------+-----------+------------+
    

      从结果我们也知道, BETWEEN AND 的结果是 包含开始区间和结束区间的

    十、GROUP BY

    #按班级统计每班的人数
    select class_code,count(*) from tb_student group by class_code;
    
    +------------+----------+
    | class_code | count(*) |
    +------------+----------+
    |       3001 |       60 |
    |       3002 |       60 |
    |       3003 |       60 |
    |       3004 |       60 |
    |       3005 |       60 |
    |       3006 |       60 |
    |       3007 |       60 |
    |       3008 |       60 |
    |       3009 |       60 |
    |       3010 |       60 |
    |       3011 |       60 |
    |       3012 |       60 |
    |       3013 |       60 |
    |       3014 |       60 |
    |       3015 |       60 |
    |       3016 |       60 |
    |       3017 |       60 |
    |       3018 |       60 |
    +------------+----------+
    

      需要注意的是,如果你使用 GROUP BY 进行分组,除了分组的字段,其他的字段,你就不能进行选取了。

    十一、HAVING

    HAVING 一般和 GROUP BY 使用居多,对分组后的数据进行过滤

    #按班级统计每班的人数,并筛选出大于60人的班级
    select class_code,count(*) as num from tb_student group by class_code having num > 60;
    
    Empty set (0.00 sec)
    

    十二、ORDER BY

    12.1 升序

    ORDER BY 就是排序,可以是升序,或者降序,默认是升序。

    #比如按出生日期查询最大的5名学生的姓名和生日
    select user_name,birthday from tb_student order by birthday asc limit 5;
    
    +-----------+------------+
    | user_name | birthday   |
    +-----------+------------+
    | 邓闲华    | 2007-01-06 |
    | 夏芷雁    | 2007-01-07 |
    | 崔晓青    | 2007-01-10 |
    | 汪易松    | 2007-01-10 |
    | 王绿凝    | 2007-01-11 |
    +-----------+------------+
    

    12.2 降序

    #比如按出生日期查询最小的5名学生的姓名和生日
    select user_name,birthday from tb_student order by birthday desc limit 3;
    
    +-----------+------------+
    | user_name | birthday   |
    +-----------+------------+
    | 傅紫文    | 2010-12-23 |
    | 康子薇    | 2010-12-22 |
    | 郭飞柏    | 2010-12-21 |
    | 金丹烟    | 2010-12-19 |
    | 段贞婉    | 2010-12-19 |
    +-----------+------------+
    

    12.3 多字段排序

    #比如按出生日期查询10名学生的姓名、生日和学号,要求按照生日升序,学号降序
    select user_name,birthday,user_code from tb_student order by birthday asc, user_code desc limit 10;
    
    +-----------+------------+-----------+
    | user_name | birthday   | user_code |
    +-----------+------------+-----------+
    | 邓闲华    | 2007-01-06 |      5356 |
    | 夏芷雁    | 2007-01-07 |      5161 |
    | 汪易松    | 2007-01-10 |      5106 |
    | 崔晓青    | 2007-01-10 |      5090 |
    | 范玉琲    | 2007-01-11 |      5338 |
    | 王绿凝    | 2007-01-11 |      5247 |
    | 赵流逸    | 2007-01-11 |      5227 |
    | 杜觅双    | 2007-01-14 |      5317 |
    | 雷慧月    | 2007-01-16 |      5279 |
    | 谭代曼    | 2007-01-18 |      5184 |
    +-----------+------------+-----------+
    

    可以看到生日是升序的,生日相同的情况下,学号是降序的。

    十三、DISTINCT

    #查询学号为5781和5546的学生的姓名
    select user_name from tb_student where user_code in(5781,5546);
    
    +-----------+
    | user_name |
    +-----------+
    | 夏晶晶    |
    | 夏晶晶    |
    +-----------+
    
    #查询学号为5781和5546的学生的姓名
    select distinct user_name from tb_student where user_code in(5781,5546);
    
    +-----------+
    | user_name |
    +-----------+
    | 夏晶晶    |
    +-----------+
    

    需要注意的是,如果你选择的是多列,比如你是

    select distinct user_name,user_code from tb_student where user_code in(5781,5546);
    

    那么它就是按照user_name+user_code 这个组合是否重复来处理的
    ±----------±----------+
    | user_name | user_code |
    ±----------±----------+
    | 夏晶晶 | 5546 |
    | 夏晶晶 | 5781 |
    ±----------±----------+

    学习计划:

    展开全文
  • 其他 前言 大神写的SQL语句可以灵活到让我们惊掉下巴,这就需要我们对各种关键字熟悉使用,以下对写查询语句能用到的关键字做了一个very详细的总结(按照字母顺序)。 1. AS 起别名,该关键字可以省略。可以给表起...


    前言

    大神写的SQL语句可以灵活到让我们惊掉下巴,这就需要我们对各种关键字熟悉使用,以下对写查询语句能用到的关键字做了一个very详细的总结(按照字母顺序)。


    1. AS

    起别名,该关键字可以省略。可以给表起别名也可以给字段起别名。
    用法:

    select sc.*, t1.avgscore 
    from sc 
    left join 
    	(
    		select sc.SId, avg(sc.score) as avgscore 
    		from sc 
    		group by sc.SId
    	) as t1
    on sc.SId = t1.SId
    order by t1.avgscore DESC
    

    2. CASE… WHEN

    类似于java中的switch()语句。这个的用法有很多,先列举一个
    用法:

    CASE sex
          WHEN '1' THEN '男'
          WHEN '2' THEN '女'
          ELSE '未知'
      END;
    

    3. CONCAT (Str1,Str2,…)

    字符串拼接,返回结果为拼接后的字符串。如有任何一个参数为NULL ,则返回值为 NULL。常用语查询的条件。
    用法:

    SELECT s.Sname FROM student s
      WHERE s.Sname LIKE CONCAT('%','张','%')
    

    4. COUNT()

    函数返回指定列的值的数目,可以用count()或count(1)来显示一共有多少条记录,COUNT(1) 比 COUNT()的速度更快。

    select count(a)
    得出一个数,该数是table表的行数,不管count(a)的a值如何变化,得出的值总是table表的行数

    用法:

    select count(*) 
    from teacher
    where teacher.Tname like '李%'
    

    5. CURDATE()、CURTIME() 、NOW()

    CURDATE():表示当前日期
    CURTIME() :表示当时的时间(不包含日期)
    NOW():表示当前日期及时间

    6. DISTINCT

    去重,只返回不同的值。支持单列、多列的去重方式。
    用法

    select DISTINCT student.* 
    from student, sc
    where student.sid = sc.sid 
    

    多列

    SELECT  count( DISTINCT user_code, user_no )    FROM    t_user
    

    注意:他是对行数据的一个去重,他是根据列去重而不是对列(字段)的去重,多表连接查询的时候,如果结果只要不同的列的话,查询的时候就要挨个写上,不要用*。

    7. EXISTS

    指定一个子查询检查是否存在数据(行)。返回值为True或False
    关于exists的详细用法请参考

    https://www.cnblogs.com/xuanhai/p/5810918.html

    8. GROUP BY

    分组。将查询结果按某一列或多列的值分组。
    用法:

    select student.* from student
    where student.sid not in (
    	select 
    		student.sid 
    	from sc, student 
    	where sc.sid = student.sid 
    	group by sid 
    	having count(*) = (select count(*) from course)
    )
    

    9. GROUP_CONCAT(字段)

    合并,将一个或多个字段的多行数据,把所有值合并成一行。默认按逗号,分隔。
    用法:例(查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息)

    select * from student ,
    	 (select * from (
    			select a.sid, GROUP_CONCAT(a.cid order by a.cid) superCid
    			from sc as a
    			group by a.sid 
    	 ) tmp1,
    	 (select GROUP_CONCAT(cid order by cid) scid 
    	 from sc where sid=01 order by cid
       ) tmp2 
       where tmp1.superCid= tmp2.scid and tmp1.sid != 01
    ) tmp3 where tmp3.sid=student.sid
    

    合并后的字段如图:
    在这里插入图片描述

    10. HAVING

    分组筛选,对对一些聚合函数或是其他运算结果的输出进行限制,库乐队分组添加限制条件。用法如上↑。

    11. JOIN

    连接。把两(多)张表合起来,从大表里面查询的一个操作。

    各种JOIN的区别:
    JOIN: 如果表中有至少一个匹配,则返回行
    INNER JOIN:与 JOIN 是相同的。
    LEFT JOIN: 即便关联条件不符合,左边表的数据一定会存在合并后的大表中。
    RIGHT JOIN: 即便关联条件不符合,右边表的数据一定会存在合并后的大表中。
    FULL JOIN: 只要其中一个表中存在匹配,就返回行。

    12. LIMIT

    分页查询。LIMIT X,Y 其中的X表示从第几行开始,Y表示返回几条记录。
    用法:

    13. REPLACE()

    替换

    14. SUBSTRING(str,from,to)

    截取字符串

    SELECT user_name FROM  user LIMIT 05
    

    15. UNION

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。他是上下合并,所以要求要联合的两个表必须拥有相同数量的列。列也必须拥有相似的数据类型。

    16. 其他

    基本的就不说了例如:

    SELECT 、*、 FROM、 WHERE 、AND 、IN、OR、LIKE

    查看表结构、查看字段的命令

    desc 表名;
    show columns from 表名;
    describe 表名;
    show create table 表名;

    展开全文
  • 当列名与关键字冲突时,使用 `` 将列名给包裹上,如`name` SELECT列表中只能包含: 1、被分组的列 2、为每个分组返回一个值的表达式,如聚合函数 */ DQL 基本查询 /* SELECT 列名 FROM 表名; 查询全部列使用* *...

    /*
    当列名与关键字冲突时,使用 `` 将列名给包裹上,如`name`
    
    SELECT列表中只能包含:
    	1、被分组的列
    	2、为每个分组返回一个值的表达式,如聚合函数
    */
    

    image-20210907084336879

    DQL

    基本查询

    /*
    	SELECT 列名 FROM 表名;	查询全部列使用*
    */
    
    SELECT * from comments;
    SELECT cmtId,cmtDate,cmtAuthor FROM comments;
    

    条件查询

    /*
    	条件查询是通过WHERE子句进行检索的查询方式
    	语法:
    		SELECT * FROM 表名 WHERE 字段=值
    */
    SELECT * FROM comments WHERE cmtId=1;
    

    多条件查询

    /*
    	定义:
    		多条件查询是利用逻辑运算符把多个条件组合起来的条件查询
    	语法:
    		SELECT * FROM 表名 WHERE 字段1=值 逻辑运算符 字段2=值
    */
    SELECT * FROM comments WHERE cmtId=1 AND cmtAuthor=‘张三1’;
    

    模糊查询

    /*
    	定义:模糊查询是使用SQL 通配符替代一个或多个字符的条件查询
    	
    	通配符;
    		1.一类字符,代替一个或多个真正的字符
    		2.与LIKE关键字一起使用
    	
    	语法:
    		SELECT * FROM 表名 WHERE 字段 like ‘包含通配符的值’;
    */
    -- 怎样获取评论者名称中包含’东’字的数据记录
    SELECT * FROM comments WHERE cmtAuthor LIKE '%东%’;
    
    

    image-20210907093727797

    分组查询

    /*
    	定义:
    		分组查询是按照指定的字段分类汇总结果的查询方式,返回的是一个表在信息列名显示
    	语法:
    		SELECT <字段名列表> FROM <表名>
            [WHERE <查询条件>]
            [GROUP BY <分组的字段名>]
            [ORDER BY <排序的列名> [ASC 或 DESC]]
            [LIMIT [位置偏移量, 行数];
    */
    SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId
    
    -- 查询每条新闻被评论的次数并且按照降序排列
    SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments
    GROUP BY newsId
    ORDER BY COUNT(*) DESC;
    

    关键字

    AS关键字

    功能

    • 给数据列取别名
    • 给表取别名
    • 可把经计算或总结的结果用另外一个新名称来代替
    SELECT cmtId AS 评论编号, cmtAuthor AS 评论者名称 FROM comments;
    SELECT com.newsId,cmtAuthor FROM comments AS com ;
    SELECT cmtId+1 AS 评论编号 FROM comments ;
    

    运算符

    功能: 它是用来进行列间或者变量之间的比较和数学运算的一种符号

    算数运算符
    运算符说明
    +加运算,求两个数或表达式相加的和,如6+8
    -减运算,求两个数或表达式相减的差
    *乘运算,求两个数或表达式相乘的积
    /除运算,求两个数或表达式相除的商,如5/3的值为1
    %取模运算,求两个数或表达式相除的余数,如:5%3的值为2
    关系运算符
    运算符说明
    =等于,例如:age=23
    >大于,例如:price>100
    <小于
    >=大于等于
    <=小于等于
    !=不等于(非SQL-92标准 )
    <>不等于
    赋值运算符
    运算符说明
    =把一个数或变量或表达式赋值给另一变量,如:Name=‘王华’
    逻辑运算符
    运算符说明
    AND或&&当且仅当两个布尔表达式都为true时,返回TRUE。
    OR或||当且仅当两个布尔表达式都为false,返回FALSE
    NOT或!布尔表达式的值取反
    
    

    IN关键字

    功能:

    • 查询符合括号内条件的数据
    /*
    	语法:
    		SELECT 字段列1,字段2 ,…FROM 表名 WHERE 字段x IN ( 值1,值2,值3…) ;
    */
    SELECT * FROM comments WHERE newsId IN(1,2);
    

    BETWEEN AND关键字

    功能:

    • 查询值1和值2区间的数据,并且包含值1和值2
    /*
    	语法:
    		SELECT 字段列1,字段2 ,…FROM 表名 WHERE 字段x BETWEEN 值1 AND 值2;
    */
    SELECT * FROM comments WHERE cmtId BETWEEN 1 AND 10
    /*
    	不能使用:BETWEEN 10 AND 1
    	这样的话,语句无误,但查询不到信息
    */
    

    DISTINCT关键字

    功能

    • 去掉SELECT查询返回的记录结果中重复的记录, 相同记录只返回一条
    • 只能针对某一个字段去重
    /*
    	语法:
    		SELECT DISTINCT 字段名1, 字段名2... FROM 表名
    */
    SELECT DISTINCT cmtContent FROM comments
    

    ORDER BY关键字

    功能:

    • 一组数据按照升序或降序排列
    • 只要是数值类型的
    /*
    	语法:
    		SELECT <字段名列表> FROM <表名>
    		[WHERE <查询条件>]
    		[ORDER BY <排序的列名> [ASC 或 DESC]]
    */
    SELECT * FROM comments ORDER BY cmtId DESC
    
    SELECT * FROM comments ORDER BY newsId,cmtId DESC
    
    /*
    	默认不写是升序排列
    	DESC倒序,由高到低
    	ASC是升序,由低到高
    */
    

    LIMIT关键字

    功能:

    • MySQL查询语句中使用LIMIT子句限制结果集
    /*
    	语法:
    		SELECT <字段名列表> FROM <表名>
    		[WHERE <查询条件>]
    		[ORDER BY <排序的列名> [ASC 或 DESC]]
    		[LIMIT 位置偏移量,行数];
    */
    -- 查询从第三行开始接下来五条数据
    SELECT * FROM comments LIMIT 2,5
    

    NULL关键字

    特点:

    • 区别空字符串’ ’
    • 只能出现在定义允许为NULL的字段
    • 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
    /*
    	语法:
    		SELECT * FROM comments WHERE 列名 IS NULL;
    */
    -- 查询列名comments为null的表的数据
    SELECT * FROM comments WHERE cmtAuthor IS NULL;
    

    HAVING关键字

    功能:

    • 分组后条件筛选
    /*
    	语法:
    		SELECT <字段名列表> FROM <表名>
            [WHERE <查询条件>]
            [GROUP BY <分组的字段名>]
            HAVING 条件
            [ORDER BY <排序的列名> [ASC 或 DESC]]
            [LIMIT [位置偏移量, ]行数];
    */
    SELECT newsId 新闻编号,COUNT(*) AS 数量
    FROM comments
    GROUP BY newsId
    HAVING COUNT(*)<5;
    

    聚合函数

    定义

    • 聚合函数是可以对一组值进行计算,并返回单个值的函数

    image-20210907094901201

    /*
    	语法:
    		SELECT 聚合函数 FROM <表名>
    */
    SELECT COUNT(*) AS 总数 FROM comments;
    
    展开全文
  • sql 中的关键字

    万次阅读 2019-08-08 21:32:48
    如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。 INSERT INTO 语句 INSERT INTO 语句用于向表格中插入新的行。 Update 语句 Update 语句用于修改表中的数据。 语法: UPDATE 表名称 ...
  • sql关键字_SQL关键字

    千次阅读 2020-07-13 08:14:52
    sql关键字SQL keywords are the reserved words for SQL operations. These Keywords are used across SQL version for different functionalities. SQL关键字是SQL操作的保留字。 这些关键字在SQL版本中用于不同的...
  • SQL 关键字以及SQL语句

    2022-05-04 22:19:08
    AS 给一个字段或值起别名
  • 一个完整的DQL语句怎么写? select …5、然后查出需要的字段 … from…1,、先执行同个哪个表查 … where(可去掉)…2、然后通过条件过滤,筛选出有价值的数据 … group by(可去掉)…3、在进行分组 … having(可去掉...
  • DQL DQL:data Query language 数据查询语言 格式:select[distinct] 字段1,字段2 from 表名 where 控制条件 (distinct: 显示结果时,是否去除重复列 给哪一列去重就在哪一列字段前加入distinct) 学生表 (1)...
  • 一个完整的DQL语句的语法格式: select ... from ... where ... group by ... having ... order by .. 执行顺序: select ... 5 from ... 1 where ... 2 group by ... 3 having ... 4 order by .. ...
  • 5 关键字精确查询 term 查询,精确的关键词匹配查询,不对查询条件进行分词。 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search 服务器响应结果: 6 多关键字精确查询 ...
  • ######### DQL条件查询关键字 ######### -- 查询id是 1 3 5 7的学生 SELECT * FROM tb_student02 WHERE id = 1 OR id = 3 OR id = 5 OR id = 7; SELECT * FROM tb_student02 WHERE id IN ( 1 , 3 ,5 ,7 ) DELETE ...
  • DDL(Data Ddefinition Language) 数据定义语言,用来定义数据库对象:库、表、列 代表性关键字:CREATE,DROP,ALTER 对逻辑结构等有操作的语句,其中包括表结构,视图和索引。 MySQL复习资料(二)——...DQL (Data
  • DQL数据查询语言数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集是一张虚拟表。查询关键字:SELECT语法:SELECT列名FROM表名【WHERE –> GROUP BY–>HAVING–> ...
  • DDL、DQL、DML、DCL会分为四部分写,本篇写DQL。 文章目录什么是DQL?查询所有列结果集查询指定列的数据条件查询使用模糊查询(属于条件查询的一种)字段控制查询去重排序聚合函数分组查询SQL语句的书写顺序SQL语句...
  • DQL语句的执行顺序

    2022-01-25 16:05:07
    DQL语句的执行顺序 select 5 ... from 1 ... where 2 ... group 3 ... having 4 ... order by 6 ... 通过from查询表,经过where条件过滤筛选出有价值的数据后,再进行group by分组,再通过having进一步筛选出有价值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,969
精华内容 6,787
关键字:

dql关键字