sql语句的概述
sql语言的分类
数据定义语言(data definition language)主要用于修改、创建和删除数据库对象,其中包括create alter drop语句。
数据查询语言(data query language)主要用于查询数据库中的数据,其主要是select语句,select语句包括五个子句,分别是from where having group by和with语句。
数据操作语言(data manipulation language)主要用于更新数据库里数据表中的数据,包括insert uodate delete语句。
数据控制语言(data control language)主要用于授予和回收访问数据库的某种权限。包括grant revoke等语句。
事物控制语言,主要用于数据库对事物的控制,保证数据库中数据的一致性,包括commit rollback语句。
常用的数据类型
mysql:
sql语句的书写规范
sql语句中不区分关键字的大小写
sql语句中不区分列名和对象名的大小写
sql语句对数据库中数据的大小写敏感
sql语句中使用–注释时,–后面至少有一个空格,多行注释用/* */
数据库的创建与删除
(1)数据库的创建:
create database database_name;
在中书写sql语句时,在sql语句后面都要加上分号
(2)数据库的删除
drop database database_name;
数据表的创建与更新
数据库中的表
(1)数据记录:在数据表中的每一行被称为数据记录
(2)字段:数据表中的每一列被称为字段
(3)主键(primary key):作为数据表中唯一的表示,保证了每一天数记录的唯一性。逐渐在关系数据库中约束实体完整性。所谓实体完整性,是指对数据表行的约束。
(4)外键(foreign key):外键用来定义表与表之间的关系。在数据表中,如果属性列f是关系b中的一个属性(并不是关系b的主键),并且属性列f是关系a的主键,则f就是b的外键。外键在关系数据库中的约束参照完整性。所谓参照完整性是指表与表之间的约束。
(5)索引:索引是指向数据表中的一个指针,指向索引字段在数据表中的物理位置。一般可以在如下几种情况下建立索引
在主键列中创建索引
多表连接时,在经常使用的连接列上创建索引
在经常使用where子句查询的列上创建索引
在经常进行分组group by及排序order by的列上创建索引
(6)约束:为了保证数据的完整性需要使用约束
唯一约束(unique)使用唯一约束的某一列或者某一组中没有相同的值,即保证了值的唯一性。但是唯一约束中可以插入null值。
主键约束(primary key)保证使用主键约束的列中只能有唯一的值,并且不能包含null值,数据表中每一列只能定义一个primary key
外键约束(foreign key)保证表参照完整性,确保对一个数据表的数据操作不会对与之关联的表造成不利的影响
检查约束(check)限制列的取值范围或者取值条件,可以为一个列定义多个check约束
非空约束(not null)用于对列的约束
创建数据表:
create table table_name(
column_name1 datatype [constraint_condition1]
[,column name2 datatype [constraint_condition2]
…)
使用约束
(1)唯一约束(unique)用来保证某一列中没有相同的值列或者某一组列中没有相同的值,一般为列创建了一个约束后,数据库会自动为该列建立一个唯一索引,其索引名与约束名相同
例如:create table t_dept(
dept_id varchar(15) unique,
dept_name varchar(10)
(2)主键约束
create table t_result(
stuid varchar(15),
cruid varchar(15),
result double,
primary key(stuid,curid)
)
(3)外键约束
foreign key[表名1](列名1)reference 表名2 (列名2)
[on update [cascade]|[set null]|[restrict]]
[on delete [cascade]|[set null]|[restrict]]
其中,foreign key是关键字,表名1是可选的,列名1是指定数据表中用于外键约束的外键,表名2表示主表的名字,列名2主表中与从表中列名1相对应列的名字,后面的on update on delete表示对表中的数据的修改或者删除,从主表之间采取什么样的操作方式,是可选的
cascade:级联删除,如果主表中一条数据记录被删除,从表中的数据也将删除
set null:置空删除,如果主表中的一条数据记录南北删除,从表中与之相连的数据也将置空
restrice:受限删除,如果主表中的一条数据被删除,则在执行delete语句时系统会报错,通知用户与主表相对应的数据在从表中依然存在,但是与主表相对应的数据在从表中不被删除,它是默认的方式
create table t_result(
stuid varchar(15),
curid varchar(15),
result double,
foreign key (stuid) referces t_student (stuid) on delete cascade,
primary key (stuid,curid)
)
(4)检查约束check
create table t_curriculum(
curid varchar(15) primary key
curname varchar(10),
credit int,
check(credit between 3 and 8)
)
(5)非空约束not null
使用索引
(1)唯一索引:在数据表中使用unique可以为一个数据列定义一个唯一索引,唯一索引中的每一个索引值只对应数据表中的一条记录,保证了数据列中记录的唯一性
(2)主索引:在数据表中使用primary key可以为一个数据列定义一个主索引,所谓的主索引就是在主键列中建立索引
(3)单列索引:定义在数据表中一个数据列上的索引就是单列索引,一般在数据查询时,如果where子句中经常用到的数据表中的某一列作为查询条件,就可以把该列创建为单列索引
(4)复合索引:索引可以定义在一个数据表的多个数据列上,像这样的索引被称为复合索引
(5)聚簇索引:创建与删除索引
create [unique]|[cluster] index index_name
on table_name(column_name排s序方式…)a
排序:关键字asc表示升序排列,关键字desc表示降序排列
数据的查询操作
查询全部列的数据记录
select *from table_name or view_name[,table_name1 or view_name1]
查询表中指定的列
select 目标列[,目标列…]
from 表名或者视图名[,表名或者视图名…]
在select语句中查询数据表或者视图指定的列时,在select语句中指定的列名必须是指定的数据表或者视图中存在的列查询表中不重复的记录
select distinct目标列[,目标列…]
from表名或者视图名[,表名或者视图名…]
使用列别名查询
select目标列[as]列别名[,目标列 [as] 列别名…]
from表名或者视图名[,表名或者视图名…]
在select语句中使用别列名的形式对数据表或者视图查询时,可以在查询的列名后面使用一个空格键来代替as,空格后面再跟上列别名的名字。如果列别名对字母大小写敏感,或者在使用包含有空格或者特殊字符的列别名,则必须使用单引号或者双引号将其引起来,否则系统将报错。
对查询的记录进行运算
select语句还可以使用算术符对指定的列进行运算,其中算术运算符包括加减乘除以及模除,在select语句中对指定的列进行算术符进行运算时,只会改变显示的结果,并不会改变显示的结果,并不会改变数据表中列的原有值
使用连接符(||)连接字段
在oracle中,可以使用||连接符连接多个字段,在使用连接符时,连接的数据类型应该是相同的,如果不同系统将会报错,如果需要在连接的字段加入字符或者日期类型的值,需要将该字符值或者日期类型的值使用单引号引起来。注意,在mysql和mysql server中并不支持连接符||,在mysql中可以使用concat函数,在ms sql server中可以使用+来连接
关于null 值
在数据库中,如果没有为该类赋值,而且该列也没有默认值,此时查询的结果就为空,即null
使用where子句查询表中满足条件的记录
比较查询
比较运算符分为三类,算数比较运算符,between and,in
算术比较运算符
sql语句中的算术比较运算符主要包括 = >= <= > < != <>(不等于) !>(不大于) !<(不小于),在select语句的where子句中可以使用算术比较运算符对指定的列进行比较,应指出的是,在ms sql server 中,<>不是不等于的意思
在sql语句中,如果在where子句中比较时整数型数据,则可以不用使用单引号,如果比较的是其他的数据类型,如字符串、日期等,则必须用单引号引起来,另外,where子句中比较运算符的左侧和右侧的数据类型必须是类型兼容的