数据库查询

一、构造数据

为了操作方便,先构造以下数据

1、学生表
create table `student` (
    `id` int unsigned primary key auto_increment,
    `name` char(32) not null unique,
    `sex` enum('男', '女') not null,
    `city` char(32) not null,
    `description` text,
    `birthday` date not null default '1995-1-1',
    `money` float(7, 2) default 0,
    `only_child` boolean 
 ) charset=utf8;

insert into `student` (`name`, `sex`, `city`, `description`, `birthday`, `money`, `only_child`) values 
('郭德纲', '男', '北京', '班长', '1997/10/1', rand() * 100, True), 
('陈乔恩', '女', '上海', NULL, '1995/3/2', rand() * 100, True), 
('赵丽颖', '女', '北京', '班花, 不骄傲', '1995/4/4', rand() * 100, False), 
('王宝强', '男', '重庆', '超爱吃火锅', '1998/10/5', rand() * 100, False), 
('赵雅芝', '女', '重庆', '全宇宙三好学生', '1996/7/9', rand() * 100, True), 
('张学友', '男', '上海', '奥林匹克总冠军!', '1993/5/2', rand() * 100, False), 
('陈意涵', '女', '上海', NULL, '1994/8/30', rand() * 100, True), 
('赵本山', '男', '南京', '副班长', '1995/6/1',  rand() * 100, True), 
('张柏芝', '女', '上海', NULL, '1997/2/28', rand() * 100, False), 
('吴亦凡', '男', '南京', '大碗宽面要不要?', '1995/6/1',  rand() * 100, True), 
('鹿晗', '男', '北京', NULL, '1993/5/28', rand() * 100, True), 
('关晓彤', '女', '北京', NULL, '1995/7/12',  rand() * 100, True), 
('周杰伦', '男', '台北', '小伙人才啊', '1998/3/28', rand() * 100, False), 
('马云', '男', '南京', '一个字:贼有钱', '1990/4/1',  rand() * 100, False), 
('马化腾', '男', '上海', '马云死对头', '1990/11/28', rand() * 100, False);
2、成绩表
create table score (
    `id` int unsigned primary key auto_increment,
    `math` float not null default 0,
    `english` float not null default 0 
) charset=utf8;

insert into score (`math`, `english`) values (49, 71), 
(62, 66.7), (44, 86), (77.5, 74), (41, 75), (82, 59.5), 
(64.5, 85), (62, 98), (44, 36), (67, 56), (81, 90), 
(78, 70), (83, 66), (40, 90), (90, 90);

二、常用的查询语句

1、select:字段表达式

  • select既可以做查询,也可以做输出
  • 示例:
select rand();  -- 随机数 
select unix_timestamp(); -- 显示Unix时间戳 
# 查询表数据
select id, name from student;

2、from子句

  • 语法:select 字段 from 表名
  • from后面是数据源,可以写多个数据源, 多个数据源时结果将会进行笛卡尔积运算。

3、where子句:按指定条件过滤

  • 语法:select 字段 from 表名 where 条件;
  • where是做条件查询,只返回结果为True的结果。
  • 示例:
select name from student where city = '上海';
  • 空值判断: is null | is not null
select `name` from `student` where `description` is null; 
select `name` from `student` where `description` is not null;
  • 范围判断
    between ... and ...
    not between ... and ...
select id, math from score where math between 60 and 70; 
select id, math from score where math not between 60 and 70; 
#  直接做比较判断
select * from score where math>=80 and english<=60; 

4、having

  • having:用于指定分组后的筛选条件
  • where 与 having的区别
    having的条件查询,只能包含在前面的搜索结果里 。
    where只能识别数据表中存在的字段,即使是为字段设置的别名也不行 。

5、groud by:分组查询

  • 语法:select 字段 from 表名 group by 分组字段 ;
  • 按照某一字段进行分组, 会把该字段中值相同的归为一组, 将查询的结果分类显示, 方便统计。
  • 示例:
# 报错,使用group需要将结果通过 “聚合函数” 拼接 
select sex, count(id) from student group by sex; 
# 使用group_concat()函数拼接结果
select sex, group_concat(name) from student group by sex;

6、order by:按字段排序

  • order by 主要作用是排序
  • 语法: select 字段 from 表名 order by 排序字段 asc|desc;
  • 分为升序 asc 降序 desc, 默认 asc (可以不写)
  • 示例:
select * from student order by age; 
select * from student order by age desc; 

7、where, order by , group by ,having 联合使用:

  • 使用顺序:where >group by > having > order by。
  • 示例:
select city, avg(money), group_concat(name), sum(money) from student where sex='男'  
group by city  having sum(money) > 70 
order by sum(money);

8、limit:限制去除数量

  • 语法:
#  从第 1 行到第 m 行 
select 字段 from 表名 limit m;
#  从第 m + 1行开始,往下取 n 行  
select 字段 from 表名 limit m, n; 
#  跳过前 n 行, 取后面的 m 行
select 字段 from 表名 limit m offset n; 

9、distinct:去重

  • 示例:
#  查看学员城市
select distinct city from student;

10、dual表

  • dual 是一个虚拟表, 仅仅为了保证 select ... from ... 语句的完整性
  • 示例:
select now() from dual;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容