SQL

1.SQL语句的分类

  • DDL语句(数据定义语句)
    主要用于定义数据库对象的SQL语句
    数据库对象:表(table),列(column),视图(view),索引(index)...

    1. create: 创建
    2. alter: 修改
    3. replace: 替换
    4. drop: 放弃(删除)
    5. truncate: 截断
  • DML语句(数据操作语句)
    主要用于数据的变更

    1. insert 插入(新增数据)
    2. update 更新(修改数据)
    3. delete 删除
    4. merage 合并
  • TCL语句(事务控制语句)
    主要用于事务控制

    1. commit 提交事务
    2. rollback 回滚事务
  • DQL语句(数据查询语句)
    主要用于查询和检索数据

    1. select 查询
  • DCL语句(数据控制语句)
    主要用于数据库权限管理

    1. grant 授权
    2. revoke 回收

2.DML语句(数据操作语句)

2.1 新增数据(insert)

语法:

  INSERT INTO 表名称 VALUES (值1, 值2,....)

向表中增加一条记录

  • 为所有的列都赋值

    image
INSERT INTO dept VALUES(1,'开发一部','沈阳');

image
  • 为指定的列赋值
    为指定的列进行赋值,未指定的列的值默认就是null
    如果某个列是not null,则它必须被赋值
INSERT INTO dept(deptno,dname) VALUES(2,'开发二部');

  • 一次插入多条数据(MySQL方言)(了解)
INSERT INTO dept VALUES(3,'开发三部','沈阳'),(4,'开发四部','沈阳');

2.2 删除数据(delete)

从表中移除一些数据

  • 无条件删除(全删除)
DELETE FROM dept;

  • 有条件删除 (根据设定条件进行删除)
  1. 删除deptno的值是4的部门记录
DELETE FROM dept WHERE deptno = 4;

  1. 删除loc的值是"沈阳"的部门记录
DELETE FROM dept WHERE loc = '沈阳';

  1. 逻辑-与 AND
    X AND Y必须同时满足两个条件X和Y
    删除loc是“北京”同时名字是“开发一部”的记录
DELETE FROM dept WHERE dname = '开发一部' AND loc = '北京'

  1. 逻辑-或 OR
    X OR Y必须满足X和Y其中任一条件
    删除loc是“北京”或者名字是“开发一部”的记录
DELETE FROM dept WHERE dname = '开发一部' OR loc = '北京'

  1. 逻辑-非 NOT
    表示逻辑取反 X = 12 取反 X != 12 X <> 12
    X > 12 取反 X <= 12
    删除学生考试分数在[80,90]区间的记录
DELETE FROM student WHERE score >= 80 and score <= 90
DELETE FROM student WHERE score between 80 and 90;

删除学生考试分数不在[80,90]区间的记录

DELETE FROM student WHERE score < 80 or score > 90
DELETE FROM student WHERE score NOT between 80 and 90;

面试题:delete,drop和truncate的区别?
delete DML语句 表示删除表中数据,这个操作是可以恢复的
drop DDL语句 表示删除整张表,包含表结构, 不可恢复
truncate DDL语句 表示截断表,不删除表结构只清空数据, 数据不可恢复,删除速度快

2.3 修改数据(update)

修改表中一些数据

  • 无条件修改(全表进行更新)
    将dept表中所有数据的dname更新为“开发部”,loc更新为“北京”
UPDATE dept SET dname = '开发部',loc = '北京' 

将emp表中所有数据的sal增加200

UPDATE emp SET sal = sal + 200

  • 有条件修改(符合条件记录进行修改)
    将dept表中的dname是“开发二部”的数据的loc设置为“北京”
UPDATE dept SET loc = '北京' WHERE dname = '开发二部'

3.事务的概念

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
比如说转账的例子是事务(101账号给102账号转账100)

update 账户 set 余额 = 余额 - 100 where 账号= 101
update 账户 set 余额 = 余额 + 100 where 账号= 102

两条SQL语句必须同时执行组成了一个完整的执行单元,必须同时成功

事务的四个特性

  • 原子性:组成事务的这些SQL语句是一个整体,不可能继续划分
  • 一致性:这些SQL语句要么同时成功,要么同时失败。不允许只成功一部分
  • 隔离性:不同事务之间不能互相干扰
  • 持久性:事务执行成功后,数据有效地保存

事务控制

set AutoCommit false;   -- 关闭自动提交
update 账户 set 余额 = 余额 - 100 where 账号= 101;
update 账户 set 余额 = 余额 + 100 where 账号= 102;
commit;   -- 手动提交

当执行commit时会将两个语句的执行结果同时执行到数据库中

set AutoCommit false;   -- 关闭自动提交
update 账户 set 余额 = 余额 - 100 where 账号= 101;
update 账户 set 余额 = 余额 + 100 where 账号= 102;
rollback;   -- 手动回滚

当执行rollback时会将两个语句的执行结果同时撤销,不会对数据库产生影响

4.查询数据准备

4.1 建表
  • 创建location表
CREATE TABLE location (
  locid varchar(64) NOT NULL,
  adress varchar(128) DEFAULT NULL,
  PRIMARY KEY (locid)
) 

  • 创建dept表
CREATE TABLE dept (
  deptno int(8) NOT NULL,
  dname varchar(64) NOT NULL,
  loc varchar(64) DEFAULT NULL,
  PRIMARY KEY (deptno)
)

  • 创建emp表
CREATE TABLE emp (
  empno int(8) NOT NULL,
  ename varchar(64) NOT NULL,
  job varchar(64) DEFAULT NULL,
  mgr int(8) DEFAULT NULL,
  hiredate date DEFAULT NULL,
  sal int(8) DEFAULT NULL,
  comm int(8) DEFAULT NULL,
  deptno int(8) DEFAULT NULL,
  PRIMARY KEY (empno),
  KEY `FK_EMP_DEPTNO` (deptno),
  CONSTRAINT `FK_EMP_DEPTNO` FOREIGN KEY (deptno) REFERENCES dept (deptno)
) 

4.2 创建数据
  • location表数据
insert  into location(locid,adress) values ('BOSTON','110, NO.5 Street');
insert  into location(locid,adress) values ('DALLAS','No.12 Farm');
insert  into location(locid,adress) values ('NEW YORK','NO 121 Queen Street ');

  • dept表数据
insert  into dept(deptno,dname,loc) values (10,'RESEARCH','BOSTON');
insert  into dept(deptno,dname,loc) values (20,'SALES','NEW YORK');
insert  into dept(deptno,dname,loc) values (30,'MANAGE','DALLAS');
insert  into dept(deptno,dname,loc) values (40,'HRD','NEW YORK');

  • emp表数据
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1001,'TOM','PROGRAMER',1004,'1994-12-22',3800,NULL,10);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1002,'SMITH','PROGRAMER',1004,'1994-07-05',3500,NULL,10);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1003,'JACK','CLERK',1004,'1992-02-12',2500,NULL,10);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1004,'SCOTT','ANALIST',1007,'1992-01-15',4500,NULL,10);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1005,'ALEX','CLERK',1006,'1993-05-07',2800,NULL,30);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1006,'FORD','MANAGER',1007,'1994-07-05',4300,NULL,NULL);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1007,'KING','PESIDENT',NULL,'1992-01-01',7000,NULL,30);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1008,'MOON','MANAGER',1007,'1992-01-15',5000,1200,20);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1009,'TED','SALESMAN',1008,'1994-07-14',2500,1500,20);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1010,'JUCY','SALESMAN',1008,'1998-08-07',2200,800,20);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1011,'LEE','SALESMAN',1008,'1999-07-12',2200,500,20);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1012,'AMY','CLERK',1008,'1994-08-05',2200,NULL,20);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1013,'EMLIY','ANALIST',1007,'1996-06-29',4500,NULL,10);
insert  into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values (1014,'ZORO','PROGRAME
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 1. 问题的提出## 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出...
    七寸知架构阅读 5,352评论 1 111
  • 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享! (1) ...
    安易学车阅读 471评论 0 4
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,698评论 0 44
  • (1)选择最有效率的表名顺序(只在基于规则的seo优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FR...
    BETWEENAND阅读 499评论 0 0
  • SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器...
    奥莉安娜的棒棒糖阅读 998评论 1 5