------------------------------------ 高级查询
-- as 起别名
select name as 名字 from studnets;
-- 消除重复的行 -- 查看有哪几种xxx
select distinct gender from students; -- 查看有哪几种性别
select distinct name,gender from students; -- 查看有哪几种(性别,姓名)组合

------ where 运算符
---- 比较
-- 等于: =
-- 大于: >
-- 大于等于: >=
-- 小于: <
-- 小于等于: <=
-- 不等于: != 或 <>
select * from students where id <= 4;
---- 逻辑
-- and or not
select * from students where id < 4 or is_delete=0;
-------- 模糊查询
-- like
-- %表示任意多个任意字符
-- _表示一个任意字符
select * from students where name like 'M%';
select * from students where name like 'Mik_';
-------- 范围查询
-- in表示在一个非连续的范围内
select * from students where id in (1, 3);
-- between ... and ...表示在一个连续的范围内
select * from students where cls_id between 1 and 3; -- 1,2,3
--------- 空判断
select * from students where cls_id is not null;

--------------------------------------------------------排序
select * from students order by name asc默认/desc;
select * from students [where age in (10, 11)] order by name; -- 先拿到数据集再排序

--------------------------------------------------------聚合函数
select count(*) from students;
-- select max min avg
select sum(age) from students;

-------------------------------------------------------- 分组
select gender from students group by gender;
-- +--------+
-- | gender |
-- +--------+
-- | 男 |
-- | 女 |
-- | 中性 |
-- | 保密 |
-- +--------+
-------------------- group by + group_concat()
select gender, group_concat(name) from students group by gender;
-- +--------+-----------------------------------------------------------+
-- | gender | group_concat(name) |
-- +--------+-----------------------------------------------------------+
-- | 男 | 彭于晏,刘德华,周杰伦,程坤,郭靖 |
-- | 女 | 小明,小月月,黄蓉,王祖贤,刘亦菲,静香,周杰 |
-- | 中性 | 金星 |
-- | 保密 | 凤姐 |
-- +--------+-----------------------------------------------------------+

-------------------- group by + 集合函数
-- 分别统计性别为男/女的人年龄平均值
select gender,avg(age) from students group by gender;

-------------------- group by + having 过滤
-- 平均年龄大于10的性别
select gender, avg(age) from students group by gender having avg(age) > 10;
-- 人数大于1的性别和人数
select gender, count(*) from students group by gender having count(*) > 1;

-------------------- group by + with rollup 汇总
---- with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和
select gender,count(*) from students group by gender with rollup;

----------------------------------------分页
select * from students limit 3; -- 取前3条,相当于0,3
---- select * from 表名 limit start,count
select * from students limit 2, 4; -- 跳过2条 从第3条开始取4条

---------------------------------------- 链接查询
select * from classes as c [inner] join students as s on c.id = s.cls_id;
-- +----+-----------+----+------+------+--------+--------+--------+
-- | id | name | id | name | age | height | gender | cls_id |
-- +----+-----------+----+------+------+--------+--------+--------+
-- | 1 | 精英班 | 1 | Mike | 10 | 170.00 | 男 | 1 |
-- | 1 | 精英班 | 2 | John | 11 | 180.00 | 男 | 1 |
-- +----+-----------+----+------+------+--------+--------+--------+
select * from classes as c left join students as s on c.id = s.cls_id;
-- +----+-----------+------+------+------+--------+--------+--------+
-- | id | name | id | name | age | height | gender | cls_id |
-- +----+-----------+------+------+------+--------+--------+--------+
-- | 1 | 精英班 | 1 | Mike | 10 | 170.00 | 男 | 1 |
-- | 1 | 精英班 | 2 | John | 11 | 180.00 | 男 | 1 |
-- +----+-----------+------+------+------+--------+--------+--------+
select * from classes as c right join students as s on c.id=s.cls_id;
-- +------+-----------+----+------+------+--------+--------+--------+
-- | id | name | id | name | age | height | gender | cls_id |
-- +------+-----------+----+------+------+--------+--------+--------+
-- | 1 | 精英班 | 1 | Mike | 10 | 170.00 | 男 | 1 |
-- | 1 | 精英班 | 2 | John | 11 | 180.00 | 男 | 1 |
-- +------+-----------+----+------+------+--------+--------+--------+

---------------------------------------自关联
-- 通常大分类有小分类这种形式的数据放到一个表中,并且pid指向表的id
CREATE TABLE `areainfo` (
`id` int(10) unsigned NOT NULL,
`name` varchar(32) DEFAULT NULL,
`pid` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
)
--- 查询广东省下的所有地级市
select c.name from areainfo as p inner join areainfo as c
on c.pid=p.id where p.name='广东省';

--- 查询山东省下的所有地级市和县区
-- 注意: [a join b on 条件] 结果是一个`表`********************

select city.name, county.name from areainfo as county join
(areainfo as city join areainfo as province
on city.pid=province.id and province.pid is null)
on city.id=county.pid
where province.name='山东省';

select city.name, county.name from (areainfo as county join
(areainfo as city join areainfo as province
on city.pid=province.id and province.pid is null)
on city.id=county.pid)
where province.name='山东省';

---------------------------------- 子查询
--- 每个SQL包含两部分 主查询 和 子查询
-- 子查询有三种类型
-- 标量子查询: 子查询返回的结果是一个数据(一行一列)
-- 列子查询: 返回的结果是一列(一列多行)
-- 行子查询: 返回的结果是一行(一行多列)

-- 标量子查询: 将子查询的结果当成一个值
-- 查询大于平均年龄的学生
select * from students where age > (select avg(age) from students);

-- 列子查询: 将子查询的结果当成同一属性(列)多个值的的集合
-- 查询班级还存在的学生的名字
select name from students where cls_id in (select id from classes);

-- 行子查询: 将多列数据看成一条数据
-- 查找班级年龄最大,身高最高的学生
select * from students where (height, age)=
(select max(height), max(age) from students);
-- 只有在最大身高、最大年龄刚好是一个人的时候才能查找到数据。

2sql的更多相关文章

  1. tp3.2sql改变时间格式

    tp3.2sql改变时间格式2018-05-10取05-10 $listIn=D('api_article as a')->field('date_format( fabutime,\'%m-% ...

  2. 2-sql基本操作

    sql基本操作 一.Sqlplus常用命令 1.查看oracle数据库的进程 2.查看oracle数据库运行状态 3.显示实例名(数据库名) 4.用sys账户登陆到数据库 5.解锁账户scott,并登 ...

  3. Ibatis学习总结2--SQL Map XML 配置文件

    SQL Map 使用 XML 配置文件统一配置不同的属性,包括 DataSource 的详细配置信息, SQL Map 和其他可选属性,如线程管理等.以下是 SQL Map 配置文件的一个例子: Sq ...

  4. 2015.4.2-SQL 简单语句(一)

    1.创建一个student表 create table student_masen( sno char(4) not null primarykey sname nchar(10) not null ...

  5. 关于面试总结2-SQL学生表

    前言 接着上一篇https://www.cnblogs.com/yoyoketang/p/10065424.html,继续学生表SQL 1.计算每个人的平均成绩, 要求显示字段: 学号,姓名,平均成绩 ...

  6. 2- SQL语句的强化

    查询类型cate_name为 '超极本' 的商品名称.价格 select name,price from goods where cate_name = '超级本'; 显示商品的种类 select c ...

  7. 廖雪峰Java15JDBC编程-2SQL入门-2insert/select/update/delete

    1. INSERT用于向数据库的表中插入1条记录 insert into 表名 (字段1,字段2,...) values (数据1,数据2,数据3...) 示例 -- 如果表存在,就删除 drop t ...

  8. 廖雪峰Java15JDBC编程-2SQL入门-1SQL介绍

    1.SQL:结构化查询语言 Structured Query Language 针对关系数据库设计 各种数据库基本一致 允许用户通过SQL查询数据而不关心数据库底层存储结构 1.1 SQL使用: 可以 ...

  9. 00 MySQL

    1数据库 1.1名词解释      DB:数据库Database,用于存放数据仓库      DBMS:数据库管理系统 DataBase Management System,管理数据库      ta ...

随机推荐

  1. Node环境搭建--详细教程

    下载地址: https://nodejs.org/en/download/ 版本:10.15.3 检测是否安装成功:我之前安装的是10.14版本

  2. Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)

    简介 经过上一次的化妆和整形,有客户提出需求能不能将那个普通会员的套餐再升级一下,再漂亮一点.所以这次咱们就来看看从哪里下刀可以使它变得再漂亮一点点. 上一篇文章修改了一些基本的ReportNG信息, ...

  3. 关于高淇JAVA中SORM总结学习笔记详细个人解释

    代码来源于高淇JAVA教学视频 谢谢高淇老师的教学. 因为自己在学习的过程中发现了很多困难点,总结下希望对自己接下来学框架提升.给像我一样得初学者方便. SORM框架是一个简单的ORM,关系对象映射, ...

  4. 来玩一局CS吗?UE4射击游戏的独立服务器构建

    前言   根据UE4官方文档的介绍,UE4引擎在架构时就已经考虑到了多人游戏的情景,多人游戏基于客户端-服务器模式(CS模式).也就是说,会有一个服务器担当游戏状态的主控者,而连接的客户端将保持近似的 ...

  5. Windows(Server)环境安装Web服务器(Apache,PHP,Mysql)图文教程

    Windows下Apache+PHP+MySQL搭建web服务器的方法,windows Server Install Apache PHP MySQL(图文详解) 环境准备: Windows Serv ...

  6. JNI技术实现--Java调C/C++

    废话不多说,首先我们来看Java调用C/C++步骤: 1.编写Java代码,在代码中使用native关键字标明该方法是调用本地库,不需要实现. 2.使用javah -jni 命令,生成对应的头文件,此 ...

  7. 论文阅读 Prefetch-aware fingerprint cache management for data deduplication systems

    论文链接 https://link.springer.com/article/10.1007/s11704-017-7119-0 这篇论文试图解决的问题是在cache 环节之前,prefetch-ca ...

  8. NOIP模拟34

    考试的时候被T2卡了一年....考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数...理论复杂度O(n^2),实际好像卡不掉的样子.但是由于我智障的打了一棵主席树,他M了.... 预计得分 ...

  9. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示

    目录管理命令ls:列出指定目录下的内容格式: ls [OPTION]... [FILE]...   -a:显示所有文件包括隐藏文件   -A:显示除.和..之外的所有文件   -l,--long:显示 ...

  10. 关于css布局的一点记录

    1 关于css实现水平垂直居中的一些方法: .css的定位:用margin,padding,position position:absolute;   //绝对定位,一般父级元素采用relative来 ...