SQL语言基础

1.SQL概述

SQL语言(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

sql 语句就是对数据库进行操作的一种语言。

2.SQL语言分类

1)数据定义语言(DDL)Data Definition language,DDL使我们有创建或删除表格的能力,也可以定义索引(键),规定表与表的连接,以施加表间的约束。

CREATE DATABASE            创建数据库

ALTER DETABASE                修改数据库

CREATE TABLE                      创建新表

ALTER TABLE      修改(改变)数据库表

DROP TABLE                            删除表

CREATE INDEX        创建索引(搜索键)

DROP INDEX                          删除引索

2)数据操控语言(DML)Data Manipulation Language,供用户实现对数据的追加、删除、更新、查询等操作。

SELECT              从数据库表中获取数据

UPDATE              更新数据库表中的数据

DELETE                从数据库表中删除数据

INSERT INTO        向数据库表中插入数据

3)数据控制语言(DCL)Data Control Language。

GRANT                                        授权

REVOKE                                撤销授权

DENY                                    拒绝授权

4)事务控制语言(TCL)Transaction Control Language。

SAVEPOINT                            保存节点

ROLLBAKE                                  回滚

COMMIT                                      提交

3.SQL语言基础

快速了解SQL 的常用定义语句:数据库的创建,表的创建,修改数据库的创建。

CREATE DATABASE 数据库名 [CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'] 设置数据库字符集及字符集校对规则。

【例】CREATE DATABASE exam CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

切换database:use 数据库名。

【例】USE exam

数据库的修改。

alter database exam character set utf8;

数据库的删除 。

drop database 数据库名

表的创建。

CREATE TABLE 表名(属性1 数据类型[长度] [约束],......) [ENGINE=INNODB DEFAULT CHARSET=utf8];(存储引擎及字符集)如

约束 数据类型介绍:

表的修改

Alter table 表名

添加字段  Alter table add column 列名  类型

添加约束  Alter  table 表名 alter  column  列名  set  default  ‘value';

alter  table  表名  add  constraint  主键名  primary  key  表名(主键字段);

alter  table  表名  add  constraint  外键名  foreign  key  (外键字段)  references  关联表名(关联字段);

修改字段    Alter  table 表名 change  原字段名  新字段名  数据类型  [ 属性 ];

删除字段  alter  table  表名  drop  字段名

修改约束 alter  table  表名  add  constraint  外键名  foreign  key  (外键字段)  references  关联表名(关联字段);

表的删除

Drop table 表名;

表的数据的插入

Insert into 表名(列1,列2,。。。。) values ();

表的数据的更新

update  表名  set  列名  =  更新值 [ where  更新条件];

表的数据的删除

Delete from  表名  [ where  更新条件]。

4.SELECT语句的语法

SELECT { * 、column、[ alias ]、...}

FROM tables

SELECT 识别什么列

FROM    识别那个表


明确的规范

sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。

连接符号 or、in、and、以及=、<=、>=等前后加上一个空格

对较为复杂的sql语句、过程、函数加上注释、说明算法、功能。

单行注释:#

多行注释:/*  ....  */ 出于之间的都会被注释

多表连接时,试用表的别名来引用例。

SQL语句规则

SQL语句大小写不敏感

SQL语句可写成一行可写成多行

一个关键字不能跨多行或进行缩写

子句通常位于独立行,以便编辑,并易读。

空格和缩进使程序易读

关键字大写,其他小写


SELECT *

FROM tables

‘ * ’ 可以使用需要查询的列替换

‘ tables ’ 可以使用需要查询的表替换

算数表达式

对NUMBER和DATE类型数据类型可以进行数学运算穿件表达式

+  -  *  /

乘法和除法的优先级高于加法和减法

同级运算的顺序是从左到右

表达式中使用括号可强行改变优先级的运算顺序

定义列的别名

改变列的标题头

使用计算结果

列的别名

如果使用特殊字符,或大小写敏感,或有空格时,需加双引号

SELECT ename AS name

FROM tables

SELECT ename ‘ Name ’

FROM tables

将ename在表中的名字改为name

返回限制

实用LIMIT关键字限制返回

SELECT *

FROM tables

LIMIT 5

显示tables中的所有列表中的前五列

SELECT *

FROM tables

LIMIT 7 OFFSET 4

SELECT *

FROM tables

LIMIT 4,7

显示tables中从第五行(4+1)开始后的七个数据

比较的表示

=                                                          等于
<                                                          大于

>                                                          小于
>=                                                      大于等于

<=                                                        小于等于
<>                                                        不等于
BETWEEN ... AND ...                          在两个值之间(包含)
IN(list)                                              匹配列出值
LIKE                                                      匹配一个字符模式
IS NULL                                                是空值


WHERE的用法

SELECT *

FROM tables

WHERE job=' sealman '

显示tables中的所有“ job=sealman ”的数据

逻辑运算符

NOT                                        如果条件为假则返回真值

AND                                        如果组合的条件都为真则返回真值

OR                                          如果组合的条件 之一是真值,返回真值


NOT                不属于(一般用作 NOT IN(...,...))

SELECT *

FROM tables

WHERE NOT job=' clerk '

显示tables中除了' job='clerk' '的所有数据

SELECT *

FROM tables

WHERE job NOT IN (sealman,clerk)

显示tables中job不属于sealman和clerk的所有数据

AND                两者都包含

SELECT *

FROM tables

WHERE job='sealman'

AND sal>3000

显示tables中既满足‘ job=sealman ’还满足‘ sal>3000 ’的所有数据

OR                  两个条件满足一个即可

SELECT *

FROM tables

WHERE job='sealman'

OR sal>3000

显示tables中' job=sealman '或者' sal>3000'的所有数据

优先级规则

括号拥有最高优先级


优先级规则

SELECT *

FROM tables

WHERE job='clerk'

OR job='sealman'

AND sal>3000

优先进行' job='sealman' AND sal>3000'在进行' OR job='clerk' '

SELECT *

FROM tables

WHERE ( job='clerk'

OR job='sealman')

AND sal>3000 

优先进行' (job='clerk' OR job='sealman') '在进行' AND sal>3000 '

ORDER BY 子句

使用ORDER BY 子句将记录排序

ASC: 升序,缺省

DESC: 降序

ORDER BY 子句在SELECT语句的最后

SELECT *

FROM tables

ORDER BY sal  (ASC)/DESC

显示tables肿的所有数据按照sal的升序(升序)/降序

通过ORDER BY 列表的顺序来排序

    SELECT job sal

    FROM tables

    ORDER BY job ASC, sal DESC;

显示job的升序和‘ job升序后 ’sal的降序


练习:

练习数据库搭建:

create table `dept` (

`deptno` int (2),

`dname` varchar (60),

`loc` varchar (60),

primary key(deptno),

index dept_index(deptno)

)ENGINE=INNODB DEFAULT CHARSET=utf8;

insert into `dept` (`deptno`, `dname`, `loc`) values('10','ACCOUNTING','NEW YORK');

insert into `dept` (`deptno`, `dname`, `loc`) values('20','RESEARCH','DALLAS');

insert into `dept` (`deptno`, `dname`, `loc`) values('30','SALES','CHICAGO');

insert into `dept` (`deptno`, `dname`, `loc`) values('40','OPERATIONS','BOSTON');

CREATE TABLE `emp` (

`empno` INT (4) primary key,

`ename` VARCHAR (60),

`job` VARCHAR (30),

`mgr` INT (4),

`hiredate` DATE ,

`sal` FLOAT ,

`comm` FLOAT ,

`deptno` INT (2),

index emp_index(deptno),

foreign key(deptno) references dept(deptno) on delete cascade on update cascade

)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7369','SMITH','CLERK','7902','1980-12-17','800.00',NULL,'20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7499','ALLEN','SALESMAN','7698','1981-02-20','1600.00','300.00','30');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7521','FORD','SALESMAN','7698','1981-02-22','1250.00','500.00','20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7566','JONES','MANAGER','7839','1981-04-02','2975.00',NULL,'20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7654','MARTIN','SALESMAN','7698','1981-09-28','1250.00','1400.00','30');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7698','BLAKE','MANAGER','7839','1981-05-01','2850.00',NULL,'30');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7782','CLARK','MANAGER','7839','1981-06-09','2450.00',NULL,'10');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7788','SCOTT','ANALYST','7566','1987-04-19','3000.00',NULL,'20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7839','KING','PRESIDENT',NULL,'1981-11-17','5000.00',NULL,'10');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7844','TURNER','SALESMAN','7698','1981-09-08','1500.00','0.00','30');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7876','ADAMS','CLERK','7788','1987-05-23','2200.00',NULL,'20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7900','JAMES','CLERK','7698','1981-12-03','950.00',NULL,'30');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7902','FORD','ANALYST','7566','1981-12-03','3000.00',NULL,'20');

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `hiredate`, `sal`, `comm`, `deptno`) VALUES('7934','MILLER','CLERK','7782','1982-01-23','1300.00',NULL,'10');

create table `salgrade` (

`grade` int (1) primary key,

`losal` float ,

`hisal` float

);

insert into `salgrade` (`grade`, `losal`, `hisal`) values('1','700.00','1200.00');

insert into `salgrade` (`grade`, `losal`, `hisal`) values('2','1201.00','1400.00');

insert into `salgrade` (`grade`, `losal`, `hisal`) values('3','1401.00','2000.00');

insert into `salgrade` (`grade`, `losal`, `hisal`) values('4','2001.00','3000.00');

insert into `salgrade` (`grade`, `losal`, `hisal`) values('5','3001.00','9999.00');


1.查询emp表,显示薪水大于2000且工作类别是manager雇员的信息

SELECT *

FROM emp

WHERE sal>=2000

AND job='manager';


练习1

2.查询emp表,显示年薪大于30000工作类别不是MANAGER的雇员信息

SELECT *

FROM emp

WHERE 12*(sal+IFNULL(comm,0))>=30000

AND job<>'manager';


练习2

3.查询emp表,显示薪水在1500到3000之间且工作类别以'M'开头的雇员信息

SELECT *

FROM emp

WHERE sal BETWEEN 1500 AND 3000

AND job LIKE 'M%'


练习3

4.查询emp表,显示佣金为空且部门编号为20或30的雇员信息

SELECT *

FROM emp

WHERE comm IS NULL

AND deptno<>10


练习4

5.查询emp表,显示佣金不为空或者部门编号为20的雇员信息,要求按照薪水降序排列

SELECT *

FROM emp

WHERE comm IS NOT NULL

OR deptno=20

ORDER BY sal DESC


练习5

6.查询emp表,显示年薪大于30000工作类别不是MANAGER,且部门号不是10或40的雇员信息,要求按照雇员姓名进行排列

SELECT *

FROM emp

WHERE 12*(sal+IFNULL(comm,0))>30000

AND job<>'manager'

AND deptno NOT IN (10,40)

ORDER BY ename


练习6


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

推荐阅读更多精彩内容