SQL语句常用命令整理---单表查询

SQL常用命令一直记得很模糊几乎每次使用的时候都需要上网查询,感觉数据库查询,应该是每个程序员的基本功啊,所以集中时间学习和练习了一些SQL语句的常用命令。这里先推荐两个网站W3School在线学习网站和SQL Fiddle在线练习网站。希望能够帮助到大家~~~

初始化Test表

  • 创建Test表
DROP TABLE IF EXISTS test;
CREATE TABLE test (
    _id integer PRIMARY KEY AUTOINCREMENT,
    empno integer(11) NOT NULL,
    name varchar NOT NULL,
    job varchar,
    mgr integer(11) ,
    hirdate date NOT NULL,
    sal double (8, 2),
    comm double(8,2),
    deptno integer(11)
);
  • 插入数据
INSERT INTO test
(empno,name,job,mgr,hiredate,sal,comm,deptno)
VALUES 
('7369', 'SMITH', 'CLERK', '7902', '2011-03-12', '800.00', null, '20'),
('7499', 'ALLEN', 'SALESMAN', '7698', '2012-03-12', '1600.00', '300.00', '30'),
('7521', 'WARD', 'SALESMAN', '7698', '2013-03-12', '1250.00', '500.00', '30'),
('7566', 'JONES', 'MANAGER', '7839', '2011-03-12', '2975.00', null, '20'),
('7654', 'MARTIN', 'SALESMAN', '7698', '2011-03-12', '1250.00', '1400.00', '30'),
('7698', 'BLAKE', 'MANAGER', '7839', '2011-03-12', '2850.00', null, '30'),
('7782', 'CLARK', 'MANAGER', '7839', '2015-03-12', '2450.00', null, '10'),
('7788', 'SCOTT', 'ANALYST', '7566', '2011-03-12', '3000.00', null, '20'),
('7839', 'KING', 'PRESIDENT', null, '2011-03-12', '5000.00', null, '10'),
('7844', 'TURNER', 'SALESMAN', '7698', '2014-03-12', '1500.00', '0.00', '30'),
('7876', 'ADAMS', 'CLERK', '7788', '2016-03-12', '1100.00', null, '20'),
('7900', 'JAMES', 'CLERK', '7698', '2015-03-12', '950.00', null, '30'),
('7902', 'FORD', 'ANALYST', '7566', '0000-00-00', '3000.00', null, '20'),
('7934', 'MILLER', 'CLERK', '7782', '2011-03-12', '1300.00', null, '10');

简单查询

  • 查询表中的所有数据
SELECT *
FROM test
  • 查询所有员工的姓名、工号和岗位。
SELECT name,empno,job
FROM test
  • 查询所有员工的年薪
    Mysql中支持 + - * / %等数学运算。
-- as 起别名使查询结果更直观
SELECT name,sal * 12 as totalSal
FROM test
  • 查询结果的拼接显示
SELECT CONCAT(ename,"的年薪为",sal * 12,"美元") AS total
FROM t_employee

CONCAT 采用数量可变的字符串自变量并将它们连接到单个字符串。 它需要至少两个输入值;否则将引发错误。 所有参数都隐式转换为字符串类型,然后串联在一起。 Null 值被隐式转换为空字符串。

  • 结果:
total
SMITH的年薪为9600.00美元
ALLEN的年薪为19200.00美元
WARD的年薪为15000.00美元
JONES的年薪为35700.00美元

条件查询

条件查询的完整语句结构如下:

select field1,field2,field3... from 表名 where 条件;

条件中,支持下列内容

  • 关系运算符和逻辑运算符关系运算符:
    • > < = != >= <=
  • 逻辑运算符:
    • and && or || xor(异或) not !
  • between… and … : 范围查询
  • is null / is not null: 是否为null/是否不为null
  • in:枚举类型范围查询
  • like : 模糊查询

  • 查询工作为CLERK,并且薪水大于800的员工信息
select * from t_employee where job = 'CLERK' and sal > 800;
select * from t_employee where job = 'CLERK' && sal > 800;
  • 查询薪水在800和1500之间的员工信息
select * from t_employee where sal between 800 and 1500;
-- 或者
select * from t_employee where sal>=800 and sal<=1500;

** 注意这是一个前闭后闭的集合。**

  • 查询薪水不在800和1500之间的员工信息
select * from t_employee where sal not between 800 and 1500;
select * from t_employee where sal >1500 or sal<800;
  • 查询mgr为null的员工的信息/查询comm奖金不为null的员工的信息
SELECT * FROM t_employee WHERE mgr IS NULL;
select * from t_employee where mgr is not null;
  • 查询工号不是7521、7782、7566和7788的员工信息
select * from t_employee where empno not in (7521,7782,7566,7788);
select * from t_employee where empno != 7521 && empno != 7782 
&& empno != 7566 and empno != 7788;
  • 查询员工姓名中以A开头的员工的信息
SELECT * FROM t_employee WHERE ename LIKE ("A%");
  • 查询员工姓名中第二个字母为A的员工的信息
select * from t_employee where ename like '_A%';
  • 查询员工姓名中含A的员工的信息
SELECT * FROM t_employee WHERE ename LIKE ("%A%");

查詢結果排序

  • 查询所有员工信息,并将员工按照工资的升序排列/降序排列
SELECT * FROM t_employee order by sal ASC;
select * from t_employee order by sal desc;

** 注意:在Mysql中,如果字段的值为null,则该值为最小值,因此在降序排序中将最后显示,而在升序排序中则将最先显示。**

  • 多字段排序:查询所有员工信息,并将员工按照工资的升序排列,如果工資相同,則安裝入職日期降序排序
SELECT * FROM t_employee order by sal asc,hiredate DESC;

限制數據查詢數量(分頁查詢)

  • 分頁查詢全部員工信息,每頁查詢5條。
SELECT * FROM t_employee limit 0,5;-- 第一页
select * from t_employee limit 5,5;-- 第二页
select * from t_employee limit 10,5;-- 第三页

** 如果客戶端發送來的數據是頁碼和每頁條數,則公式爲 limit (頁碼-1)*每頁條數,每頁條數 **

  • 查詢獎金爲null的前兩條記錄。
SELECT * FROM t_employee where comm is null limit 0,2;

統計函數

  • 查詢公司領取獎金的人數。
select count(comm) from t_employee where comm != 0;
  • 查詢員工領取獎金的平均值。
select avg(comm) from t_employee where comm != 0;

AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

  • 查詢所有員工工資的總和
select sum(sal) from t_employee;
  • 查詢員工中最高工資和最低工資
select max(sal),min(sal) from t_employee;

分組數據查詢

  • 查詢每個部門員工的工資總和
select deptno, sum(sal) from t_employee group by deptno; 
  • 查詢每個部門員工的人數、工資總和、平均工資、最高工資和最低工資
select deptno,count(ename),sum(sal),avg(sal),max(sal),min(sal) 
from t_employee 
group by deptno;
  • 按照部門編號和入職日期分組,統計每組的工資總和、平均工資
select deptno,hiredate,sum(sal),avg(sal)
from t_employee
group by deptno,hiredate;
  • 按照部門編號分組,查詢每組工資總和大於2000的部門的人數、總工資、平均工資。
select deptno,count(*),sum(sal),avg(sal) 
from t_employee
group by deptno
having sum(sal) > 2000;

** where條件和having條件的區別 **

  1. having不能单独使用一般和组函数一起使用,用在group by后面来完成分组的数据的筛选;where和组函数一起使用时,会在group by之前进行筛选结果,优先级高于group by;
  2. where作用在硬盘上的数据,having作用在内存中的数据,所以where效率高,在兩者都能使用的情況下,優先選擇where;
  3. where后面不能跟别名 having可以。

更新操作

  • 设置SMITH员工的奖金为300
update t_employee set comm = 300 where ename = `SMITH`;

删除操作

  • 删除姓名SMITH的记录
delete from t_employee where ename = SMITH;
  • 删除全部数据
delete from t_employee ;
或
truncate student;
  • 两者区别:
    • delete 将删除的条数返回,truncate则返回0;
    • delete 较慢,而truncate则速度快;
    • delete 不会改变自增值,而truncate则会讲自增值置为1从头开始;
    • drop table 表名;整个表都删除

以上就是常用单表查询的一些命令收集了,接下来再学习多表联合查询。


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

推荐阅读更多精彩内容

  • 多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...
    Elder阅读 5,726评论 0 12
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,716评论 0 2
  • oracle 数据库的scott帐号。 <>作为查询条件时,可以使用!= 来替换。 SQL> select * f...
    庄栋栋阅读 2,142评论 0 0
  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,905评论 0 4
  • 活在未来,就是相信自己对于未来的规划,并以此思考和践行。这让我们脱离了过去和当下的束缚。只要相信,就一定能实现,世...
    漂亮的蓝一阅读 178评论 1 0