MySQL单表查询

MySQL单表查询

格式:
SELECT col_name1, col_name2, .... FROM tb_name [select_statement]

简单查询
[root@client ~]# mysql -uroot -p < jiaowu.sql
mysql> select * from tutors;
mysql> select Tname,Age from tutors;
mysql> select Tname as 教师,Age as 年龄 from tutors; //给字段设置别名
mysql> select sql_no_cache * from new1; //不使用cache直接取数据
mysql> reset query cache; //清空query cache后取数据

避免重复查询
mysql> select distinct * from tutors; //去掉完全重复的行
mysql> select distinct Age from tutors; //查询有哪些年龄

通过条件查询
where condition
数字操作符:
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于

大于
= 大于等于
between 5 and 10 在两个值之间
逻辑操作符:
and
or
and和or并存时and的优先级高
包含和不包含:
in
not in
空值或者非空值:
is null 空值
is not null 非空值

示例:
mysql> SELECT * FROM tutors WHERE Age > 80;
mysql> SELECT * FROM tutors WHERE Age >= 70 AND Age <= 80;
mysql> SELECT * FROM tutors WHERE Age BETWEEN 70 AND 80;
mysql> SELECT * FROM tutors WHERE Tname = "OuYangfeng" OR Tname = "YiDeng" OR Tname = "HuYidao";

使用in查询的优点:
1.in的语法更加直观
2.in的计算次序更容易管理(操作符少)
3.in 一般比or执行的更快
4.in的最大优点可以包含其他子句 or不行
mysql> select * from tutors where Tname in ("OuYangfeng","YiDeng","HuYidao");
mysql> select * from tutors where Tname not in ("OuYangfeng","YiDeng","HuYidao");

mysql> select * from tutors where TID=6 or TID=7 and age > 60;
mysql> select * from tutors where ( TID=6 or TID=7 ) and age > 60;

mysql> insert into tutors values(10,'Alice','F',null);
mysql> select * from tutors where Age is null;
mysql> select * from tutors where Age is not null;

模糊查询
1、LIKE "通配符表达式"
通配符’%’匹配多个字符
通配符’_’匹配一个字符

使用通配符的原则:
尽量少使用通配符,如果其他操作符能做到就不要使用通配符
在确实需要通配符时,尽量不要使用%erry 这种用法,搜索起来会更慢 ,可以将%放到后面
至于使用位置,使用错了得不到想要的结果

mysql> SELECT * FROM tutors WHERE Tname LIKE "%ang%";
mysql> SELECT * FROM tutors WHERE Tname LIKE "Y%" OR Tname LIKE "H%";
mysql> SELECT * FROM tutors WHERE Tname LIKE "Y%" OR Tname LIKE "H_____";

2、rlike正则表达式
mysql> SELECT * FROM tutors WHERE Tname RLIKE "^[HY]";
mysql> SELECT * FROM tutors WHERE Tname rlike "ao$";

按指定的字段内容排序
ORDER BY <col_name> [ASC|DESC] DESC|ASC:降序|升序,默认

按单列排序
mysql> SELECT * FROM tutors ORDER BY Age;
mysql> SELECT * FROM tutors ORDER BY Age DESC;

按多列排序
按照年龄排序降序,年龄相同按照TID降序
mysql> select * from new1 order by age desc,TID desc;

限制查询的记录数
LIMIT [n,]m 忽略前n行,共显示m行

mysql> SELECT * FROM tutors LIMIT 3;
mysql> SELECT * FROM tutors LIMIT 2,3; //从第三个开始取,取三个
mysql> SELECT * FROM tutors ORDER BY Age LIMIT 1;
mysql> SELECT * FROM tutors WHERE Gender="M" ORDER BY Age DESC LIMIT 1;
//性别为男,年龄最大的

最大年龄有多个的情况
mysql> insert into tutors values(10,'LingLing','F',93);
mysql> SELECT * FROM tutors ORDER BY Age desc LIMIT 1;
mysql> select * from tutors where Age=(SELECT Age FROM tutors ORDER BY Age desc LIMIT 1);

年龄最大的前三个,显示用户的详细信息
mysql> select * from tutors where Age in (select t . Age from (select * from tutors order by Age desc limit 3 ) as t) order by Age desc;

使用集合函数查询
函数:可以实现某些特定功能的代码

concat连接字符串
mysql> create table mail(name char(10),domain varchar(20));
mysql> insert into mail values('alice','uplooking.com');
mysql> insert into mail values('tom','uplooking.com');

mysql> select concat(name,'@',domain) from mail;
mysql> select concat(name,'@',domain) as email from mail;

upper、lower大小写转换
mysql> select upper(name) as new_name from mail;
mysql> select lower(upper(name)) from mail;

sum求和、avg求平均数、max求最大值、min求最小值、count统计总数
mysql> create table emp(id int,name char(10),salary float(10,2),did int);
mysql> insert into emp values(1,'alice',5000,100),(2,'jerry',6000,100);
mysql> insert into emp values(3,'tom',10000,200),(4,'john',20000,200);
mysql> insert into emp values(5,'robin',3000,300),(6,'rose',2000,300);
mysql> insert into emp values(7,'jean',8000,300),(8,'uuu',30000,300);

mysql> select sum(salary) from emp;
mysql> select avg(salary) from emp;
mysql> select max(salary) from emp;
mysql> select min(salary) from emp;
mysql> select count() as count from emp;
mysql> select count(
) from emp where did=100;

通过四则运算查询 (不支持+=)
mysql> select name,salary12 from emp;
mysql> select name,salary
12 as annual_salary from emp;
mysql> select name,(salary+1000)*12 as annual_salary from emp where name='rose';

year、month、day、hour、minute、second
mysql> create table time(t_timestamp timestamp);
mysql> insert into time values(null);

mysql> select year(t_timestamp) from time;
mysql> select month(t_timestamp) from time;
mysql> select day(t_timestamp) from time;
mysql> select hour(t_timestamp) from time;
mysql> select minute(t_timestamp) from time;
mysql> select second(t_timestamp) from time;

group by 分组函数
注:group by必须在where之后,分组前过滤;having的用法和where相同,但可以分组后过滤,一般不使用
mysql> select count() from emp group by did; //显示每个部门有多少人
mysql> select count(
) as num from emp group by did having num >3; //取出部门人数超过三个的

mysql> select count(*) as num from emp where salary < 10000 group by did having num >2;

GROUP BY关键字和连接字符串的GROUP_CONCAT()函数一起使用,查看每个部门的员工
mysql> select did,group_concat(name) as emp_members from emp group by did;
GROUP BY与COUNT() 集合函数一起使用,统计每个部门有多少个人
mysql> select did,count(id) as number from emp group by did;

========================================================
练习:
1、求scores表中所有人的成绩的总和
2、求scores表中SID相同的平均值
3、求scores表中SID相同的平均值,且只显示平均值大于68的

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

推荐阅读更多精彩内容

  • 笔记: 一、聚合函数:计数 最大值 最小值 平均数 求和 1.计数 COUNT() 忽略NULL值 方式1:COU...
    凤之鸠阅读 5,129评论 0 1
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,057评论 0 0
  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 555评论 0 0
  • 文/萧郎 很长时间以来,我都想写一篇这样的文章,迫于作为地球人的我,一直承受拖延症的残害,直至今日,方得以...
    xiaolang读书阅读 741评论 1 1
  • 《指月录》载有这样一个故事:“有僧到赵州,从谂禅师问‘新近曾到此间么?’曰:‘曾到’,师曰:‘吃茶去’。后院主问曰...
    骏马悲嘶阅读 1,246评论 44 45