前言:
这一节课,我们来先来了解一下什么是SQL语言,然后通过一些简单的操作实例及概念讲解,帮助大家理解和消化这部分内容。
什么是SQL语句,及简单的写法
sql 语句是对数据库进行操作的一种语言。结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL的四种语言
DDL(Data Definition Language)数据库定义语言
DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数 据的完整性、安全控制等约束。
简单点来说,DDL语句就是用与定义和管理数据库中的对象。DDL语句不需要commit
,也不能rollback
。
常见的DDL命令有:
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAMEDML(Data Manipulation Language)数据操纵语言
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
简单来说,DML语言能够使用户能够查询数据库以及操作已有数据库中的数据。
常见的DML命令有:
SELECT
INSERT
UPDATE
DELETEDCL(Data Control Language)数据库控制语言
DCL语言主要负责授权和角色控制。
常见的DCL命令有:
GRANT
REVOKETCL(Transaction Control Language)事务控制语言
顾名思义,TCL语言主要负责事务的控制。
常见的TCL命令有:
SAVEPOINT
COMMIT
ROLLBACK学习SQL语句前要知道的一些内容
术语相关:
前条件:指数据库在缓存(或硬盘)上获取数据的筛选记录的条件。
后条件:指数据库在结果集(执行内存)上进行筛选记录的条件。
子句:根据SQL语句语法中的动词,将整句SQL语句拆分成几部分,每部分叫做该动词的子句。
例如:select * from t1 where id = 1
select *
部分叫做select子句
from t1
部分叫做from子句
where id = 1
部分叫做where子句常用的查询条件

对表操作,先要有表
我们要知道,今天的课,主要讲的内容,都是跟数据表有关的,那么我们首先要先建立一张表,往这张表里写一些数据。
Create table
语句
语法:
说明:create table table_name (column_name1 column_type1[, column_name2 column_type2[, …]] )
table_name
表名
column_name1
,column_name2
, … 字段名
column_type1
,column_type2
, … 字段类型
一个简单的建表语句:
我手工通过for update的方式,往这张表里插入了几条数据:create table TEST_LIJIAN (id VARCHAR2(100)) tablespace JLLT_DM pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );
我们的重点是DML语句
DML里的老大 —- SELECT
select语句,有过经验的同事应该不陌生,可以说是很熟悉,日常应用的最多的也是它。那么它的语法是什么呢?
语法:Select [ all | distinct ] <目标列表达式> From <表名> | <视图名> [ ,<表名> | <视图名> ] [ Where <条件表达式> ] [ Group by <列名[ , 列名 ]> [ having <条件表达式> ] ] [ order by <列名[ , 列名]> [ ASC | DESC ] ]注:
Group by
的分组字段根据字段前后顺序分组
Order by
排序字段根据字段前后顺序排序(后一个在前一个基础上排序)
最简单的select语句:
select * from dual;DML里最危险的人 — DELETE
为什么说delete
是最危险的呢,因为实际操作的时候,误删数据是常有的事儿,很多现网数据库都遇到过这种情况,最后不得已翻出备份来进行恢复。那么它的语法是什么呢?
语法:delete from table_name where column_name1 = column_value1 [ and | or column_name2 = column_value2[ and | or …]]说明:
table_name
表名
column_name1
删除记录依据的字段名
column_value1
删除记录依据的字段值
and
表示与(同时满足条件的记录)
or
表示或(部分满足条件的记录)
最简单的删除一条数据的命令:
delete from test_lijian where id = 1;
- 不够就加,insert语句的本领
一张数据表中,数据不可能是永远都是固定的,如果想再往数据表里增加数据,那就是Insert语句的功能了。
语法:
说明:insert into table_name (column_name1[, column_name2[, …]]) values (column_value1[, column_value2[, …]] )
table_name
表名
column_name1
,column_name2
,…
字段名
column_value1
,column_value2
,…
字段存储的值
最简单的一条insert语句:
insert into test_lijian (id) values (1); 知错就改,谦虚的update
实际生产中,我们有的时候在一张表的数据会有变化,那这时候update
的作用就展现出来了,它可以完成已有数据的转换工作。
语法:
语法:update table_name set column_name1 = column_value1 [, column_name2 = column_value2[, …]] where column_name3 = column_value3[ and | or column_name4 = column_value4[ and | or …]]说明:
table_name
表名
column_name1
,column_name2
, … 字段名
column_value1, column_value2
, … 要修改成的字段值
column_name3, column_name4
, … 修改记录依据的字段名
column_value3
,column_value4
, … 修改记录依据的字段值
and
表示与(同时满足条件的记录)
or
表示或(部分满足条件的记录)最简单的一条update语句:
update test_lijian set id = 2 where id = 1;
一些select语句和运算符结合的相关例子
还记得最开始说的那些运算符吗?我们将它们结合sql语句来一起看看如何应用它们。
- 我们给出一张示例表

- 查询现存数量少于5000的动物信息
select * from animal where number < 5000;
结果为:
- 查询现存数量在10000~100000之间的动物信息
select * from animal where number between 10000 and 100000;
结果为:
- 查询产地在中国、孟加拉和阿富汗的动物信息
sql语句:
select * from animal where address in (‘中国’,‘孟加拉’,‘阿富汗’);
结果为:
- 查询名称中包含‘熊’的动物信息
select * from animal where name like ‘%熊%’;
结果为:
- 查询名称不为空的动物信息
select * from animal where name is not null; - 查询名称包含熊并且数量大于10000的动物信息
select * from animal where name like‘%熊%’and number > 10000;
除了select,我们还要掌握简单的几个函数
- COUNT函数 — 求总数
- SUM函数 —求和
- AVG函数 —求平均
- MAX函数 —求最大值
- MIN函数 —求最小值
我们用几个不同的例子来看一下:select count(*) from animal where address = ‘中国’;select sum(number) from animal where kind = ‘熊科’;select avg(number) from animal where kind = ‘象科’;select max (number) from animal;select min (number) from animal;
查询条件的等价关系
- 先看一张表

如下的查询语句,结果都是一致的:
Select * from A where A.ID < 3; Select * from A where A.ID between 1 and 2; Select * from A where A.ID in (1,2); Select * from A where A.ID not like '3%'; Select * from A where A.ID = 1 or A.ID = 2;




