SQL
目录
一、数据定义语言(DDL,Data Definition Language)
二、数据操作语言(DML,Data Manipulation Language)
三、数据操纵语言(Data Manipulation Language,DML)
SQL(Structured Query Language,结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。
SQL语言主要由以下几个部分组成:
一、数据定义语言(DDL,Data Definition Language)
DDL主要用于定义数据库、表等结构,以及索引等数据库对象。通过DDL,可以构建数据库的骨架,为数据的存储做好准备。DDL包括以下几个主要语句:
- CREATE:
- 用于创建数据库、数据表、索引等。例如,使用CREATE DATABASE mydb1可以创建一个名为mydb1的数据库。
- ALTER:
- 用于修改数据库或表的结构。例如,使用ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(255)可以向表mytable中添加一个新的列newcolumn。
- DROP:
- 用于删除数据库、数据表或索引等。例如,使用DROP TABLE mytable可以删除表mytable。
实例:
1. creat table
创建一个名为student的表格。
create table `student`(
`sno` char(10),
`sname` char(10) NOT NULL DEFAULT '',
`ssex` char(2) NOT NULL DEFAULT '',
`sage` int ,
`sdept` char(20) NOT NULL DEFAULT '',
primary key(`sno`));
primary key(Aj1,Aj2,....,Ajm):主码声明表示 属性Aj1,Aj2,....,Ajm构成关系的主码,没有元组会在主码属性上取空值。
foreign key(Ak1,Ak2,...Akn) reference s: 外码 声明表示关系中任意元组在属性(Ak1,Ak2,...Akn)上的取值必须对应于关系s中某元组在主码属性上的取值。
not null: 一个属性上的非空约束表明在该属性上不允许存在空值;换句话说,此约束把空值排除在该属性域之外。
一个新创建的关系最初是空的。
2. drop table
从数据库中删除关于被去掉关系中的所有信息。
比delete from r 更强。
后者保留关系,但删除r中的所有元组。前者不仅删除r中的所有元组,还删除r的模式。
3. alter table
为已有关系添加属性。
二、数据操作语言(DML,Data Manipulation Language)
DML主要用于对数据库中的数据进行添加、修改和删除操作。DML包括以下几个主要语句:
- INSERT:
- 用于向表中插入数据。例如,使用INSERT INTO mytable (column1, column2) VALUES (value1, value2)可以向表mytable的column1和column2列中插入值value1和value2。
- UPDATE:
- 用于修改表中的数据。例如,使用UPDATE mytable SET column1 = newvalue WHERE condition可以更新表mytable中满足条件condition的行的column1列的值。
- DELETE:
- 用于删除表中的数据。例如,使用DELETE FROM mytable WHERE condition可以删除表mytable中满足条件condition的行。
三、数据操纵语言(Data Manipulation Language,DML)
- INSERT:
- 用于向表中插入新的数据行。例如,INSERT INTO mytable (column1, column2) VALUES (value1, value2)表示向表mytable的column1和column2列中插入值value1和value2。
- UPDATE:
- 用于修改表中已存在的数据行。例如,UPDATE mytable SET column1 = newvalue WHERE condition表示更新表mytable中满足条件condition的行的column1列的值。
- DELETE:
- 用于删除表中已存在的数据行。例如,DELETE FROM mytable WHERE condition表示删除表mytable中满足条件condition的行。
- SELECT:
- 用于从数据库中查询数据。SELECT语句可以包含各种子句和条件,以指定要查询的数据和排序方式等。例如,SELECT column1, column2 FROM mytable WHERE condition ORDER BY column1表示从表mytable中查询满足条件condition的行,并按照column1的值进行排序。
实例
4.select
查询的基本结构由三个子句构成:select,from和where。
单关系查询
select name
from instructor
distinct强行去除重复。
select distinct dept_name
from instructor
select 子句还可带含有+ 、-、*、/运算符的算术表达式,运算对象可以是常数或元组的属性。
select ID,salary*1.1
from Instructor
多关系查询
把需要访问的关系都列在from子句中,通过笛卡尔积把关系中相互没有关联的元组组合在一起。
where子句中使用谓词限制笛卡尔积所创建的组合。
select name,course_id
from instructor,teaches
where instructor.ID=teaches.ID;
查询可以理解为:
1. 为from子句中列出的关系产生笛卡尔积。
2. 在步骤1的结果上应用where子句中指定的谓词。
3. 对于步骤2的结果中的每个元组,输出select子句中指定的属性(或表达式的结果)。
四、完整性(Integrity)
数据库完整性是指数据库中的数据在逻辑上的一致性、正确性、有效性和可靠性。它确保数据不会因为各种操作而变得不合理或失去意义。
五、嵌入式SQL
定义:
嵌入式SQL是将SQL语句直接嵌入到宿主语言(如C、C++、Java等)代码中的一种方法。开发人员需要使用特定的语法和预处理器来将SQL语句与宿主语言代码集成在一起。
六、动态SQL
定义:
动态SQL是一种在运行时构建和执行SQL语句的方法。开发人员需要使用字符串拼接或模板引擎等技术来动态生成SQL语句,然后这些语句可以在应用程序运行时传递给数据库服务器进行执行。