MySQL:DML操纵语言

一、INSERT插入

(一)语法

INSERT [INTO] <表名> [列名] VALUES <值列表>

(二)叙述

如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用‘ ’或“ ”引号括起来。

(三)举例

向people表中添加一条记录:

insert into people(name,age) values(“zhangsan”,20);

(四)注意

  1. 每次插入一行数据,不可能只插入半行或者几列数据。因此,插入的数据是否有效将按照整行的完整性的要求来检验;
  2. 每个数据值的数据类型、精度和小数位数必须与相应的列匹配;
  3. 如果在设计表的时候就指定了某列不允许为空,则必须插入数据;
  4. 具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值。

(五)插入多行数据

INSERT INTO <表名>(列名) VALUES(<列名值>), (<列名值>), (<列名值>) ......

二、UPDATE更新

(一)语法

UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]

(二)叙述

where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据。

(三)举例

将student表中的所有学生名称为"Alex"的改为"Tom":

update student set sname="Tom" where sname="Alex";

三、DELETE 删除

(一)语法

DELETE FROM <表名> [WHERE <删除条件>]

(二)叙述

此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。

(三)举例

删除student表中的所有年龄小于18岁的记录:

delete from student where sage<18;

四、SELECT查询

(一)语法

SELECT [DISTINCT | DISTINCTROW | ALL]
select_expression,...
[FROM table_references
[WHERE where_definition]
[GROUP BY col_name,...] 集函数
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name |
formula} [ASC | DESC] ,...]
[LIMIT [offset,] rows]
[PROCEDURE procedure_name]
]

(二)叙述

from子句:指定查询数据的表
where子句:查询数据的过滤条件
group by子句:对匹配where子句的查询结果进行分组
having子句:对分组后的结果进行条件限制
order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)。
limit子句:对查询的显示结果限制数目
procedure子句:查询存储过程返回的结果集数据

(三)举例

  • 查询全体学生的学号与姓名:
select sno,sname from student;
  • 查询全体学生的详细记录:
select sno,sname,ssex,sage,sdept from student;
或
select * from student;
  • 查全体学生的姓名及其出生年份:
select sname,2008-sage from student;
  • 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名:
select sname,'year of birth: ',2008-sage, lower(sdept) from student;
  • 查询选修了课程的学生学号(去掉重复的记录):
select distinct studentid from sc;
  • 查询全体学生的学号与姓名,用中文显示列名:
select sno as ‘编号’,sname as ‘姓名’ from student;
  • 给表设置别名:
select s.sno,s.sname from student as s;
  • 查询年龄在20以下的学生的姓名:
select sname from student where sage<20;
  • 查询全体学生的姓名、年龄,要求按照年龄降序排序:
select sname,sage from student order by sage desc;
  • 查询年龄最大的前3个学生的姓名和年龄,或第4、5个学生:
select sname,sage from student order by sage desc limit 3;
或(limit 3,2)

(四)函数集

  • 记数函数: count(列名) 计算元素的个数
  • 求和函数: sum(列名) 对某一列的值求和,但属性必须是整型
  • 计算平均值:avg(列名)对某一列的值计算平均值
  • 求最大值: max(列名) 找出某一列的最大值
  • 求最小值: min(列名) 找出某一列的最小值

(五)创建计算字段concat

  • 举例
select concat(stuName, ' is ', stuAge, ' years old') 
from student order by stuAge desc;

(六)多表查询——连接查询

  • 同时涉及多个表的查询称为连接查询。用来连接两个表的条件称为连接条件。
  • 连接查询分为两种:
    内连接(INNER JOIN)
    外连接:左外联结 (LEFT JOIN)、右外联结 (RIGHT JOIN)
  • 外连接与普通连接的区别:
    普通连接操作只输出满足连接条件的元组
    外连接操作以指定表为连接主体,将主体表中不足连接条件的元组一并输出
  • 不支持全连接(笛卡尔乘积)

(七)子查询

将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块。

独立子查询

  1. 独立多值子查询
    子查询返回的是数据集。
    举例:当子查询返回多行时,all 所有的 any 任意一个。
    a. 谁比所有的 Lacus 工资高:
select empno,ename,salary from emp where
salary > all(select salary from emp where ename = 'Lacus');

b. 谁比任意一个 Lacus 工资高:

select empno,ename,salary from emp where
salary > any(select salary from emp where ename = 'Lacus');
  1. 独立单值子查询(独立标量子查询)
    子查询返回的是单个值,而不是数据集。若返回的是数据集,则会报错。
    举例:
    查询出工资比 ZZ 高的员工的编号、姓名、工资
select empno,ename,salary from emp where salary >
(select salary from emp where ename = 'ZZ');

相关子查询

  • 相关子查询最基本的执行逻辑
    将外部表中的 “每一行” 逐行代入到子查询中(理解相关子查询的关键)
  • 举例:
    查询分数低于 80 分的人
Select sname from students where exists (select * from sc where
students.sno = sc.studentsid and sc.grade < 80);

求哪些员工的薪水比本部门的平均薪水低

select empno,ename,salary from emp e1 where salary <
(select avg(salary) from emp e2 where e2.deptno = e1.deptno);

求每个部门的最高工资的员工的编号和姓名

select empno,ename,salary from emp e1 where salary =
(select max(salary) from emp e2 where e2.deptno = e1.deptno);

exists 子查询

  • 叙述
    exists 判断时,判断的是一个 bool 类型,不判断列值是否相同书写时,直接按照 where exists 的方式使用。子查询中 select 不需要返回一个列值,只需要返回一个 bool 值,所以不需要查询某一列。一般情况下我们用 select 1( 一个常量 ) 做查询条件。
  • 举例
    求哪些人是其他人的经理
select empno,ename from emp where empno in
(select mgr from emp where mgr is not null);
select empno,ename from emp where empno = any
(select mgr from emp where mgr is not null);
select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.empno = e2.mgr);

(八)子查询和连接查询的选择

返回结果位于不同表中的列时,使用连接查询;同一张表中的列时,使用子查询。

(九)组合查询

  • 需要使用到组合查询的情况:

在单个查询中从不同的表返回类似结构的数据
对单个表执行多个查询,按单个查询返回数据

  • 举例:
    找出年龄为18岁或者是计算机系或者是音乐系的学生:
select stuName from student where stuAge = 18 
union select stuName from student where stuDepart in('计算机系', '音乐系');
  • union 使用规则:
  1. union 必须由两条或者两条以上的select 语句组成,语句之间用union 关键字分隔(若组合4 个select 语句,则需要使用3 个union 关键字)
  2. union 每个查询中必须包含相同的列、表达式或者聚集函数
  3. 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐式转换的类型

五、复制表

创建一个副本:
可以通过在SELECT查询中指定字段来限制出现在附表中的字段。

CREATE TABLE grades SELECT * FROM marks;

通过使用SELECT 语句创建已存在表的空副本,并且返回一个空结果集。

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

推荐阅读更多精彩内容

  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 554评论 0 0
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,172评论 0 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,681评论 0 2
  • 距离魔宝初级班结业有好几天了,今天一定得把毕业心得写了,要不然事情越堆越多我容易变得焦虑!历时42天的魔宝初级班课...
    Rhonda_ebd8阅读 273评论 9 5
  • 这是冬妮娅写给她丈夫尤拉的一封信。由于战争,幸福的家庭破碎了,深爱对方的两人天涯分隔,音信全无。若干年后,劫后余生...
    Bintou老师阅读 915评论 2 2