SQL进阶篇

来源:互联网 发布:安卓数据恢复工具 编辑:程序博客网 时间:2024/04/28 09:40

1、介绍SQL
SQL(Structured Query Language, 结构化查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语言通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、Sybase、Microsoft SQL Server、Access、Ingres等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。但是,标准的SQL命令,比如”Select”、 “Insert”、 “Update”、 “Delete”、 “Create”和 “Drop”常常被用于完成绝大多数数据库的操作。

但是,不象其它的语言,如C、Pascal等,SQL没有循环结构(比如if-then-else、do-while)以及函数定义等等的功能。而且SQL只有一个数据类型的固定设置,换句话说,你不能在使用其它编程语言的时候创建你自己的数据类型。

SQL功能强大,但是概括起来,它可以分成以下几组:

DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据;

DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象;

DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。

DML组可以细分为以下的几个语句:

SELECT:用于检索数据;

INSERT:用于增加数据到数据库;

UPDATE:用于从数据库中修改现存的数据

DELETE:用于从数据库中删除数据。

DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:

CREATE TABLE

ALTER TABLE

DROP TABLE

CREATE INDEX

DROP INDEX

DCL命令用于创建关系用户访问以及授权的对象。下面是几个DCL命令:

ALTER PASSWORD

GRANT

REVOKE

CREATE SYNONYM

为了让你对SQL有一个直观的认识,下面先给出一个简单SQL语句的例子:

我们使用SQL语句来从Employees中检索Department ID为CS的姓名:

SELECT Employees.Name

FROM Employees

WHERE Employees.DeptID = “CS”

可能你现在一开始不太理解这些语句,也许你会一头雾水,不要紧的,通过本教程的学习后,你会发现这段语句是多么的普通。为了不让你困惑,下面我也进行一番解释:

先对FROM子句吧,语句中的FROM Employees意思是从Employees表中检索数据。

而语句WHERE Employees.DeptID = “CS”意思是检索Employees的DeptID列为”CS”的行,这样SQL语句检索的结果将是DeptID为CS的列的所有数据。

2、数据检索
在SQL中SELECT语句通常用于检索数据库,或者检索满足你设定条件的数据,以下是简单的SELECT语句的格式:

select “column1”[,”column2”,etc] from “tablename”

[where “condition”];

[] = optional

其中列的名字跟着SELECT关键字,它决定了哪一列将被作为结果返回。你可以任意指定多个列,或者你可以使用”*”来选择所有的列。

表的名字是紧跟着FROM关键字的,它指出了哪个表格将作为最后结果被查询。

而WHERE子句(可选)指出哪个数据或者行将被返回或者显示,它是根据关键字WHERE后面描述的条件而来的。

在WHERE子句中可以有以下的条件选择:

= 等于

大于

< 小于

= 大于等于

<= 小于等于

<> 不等于

LIKE 参见以下注释

注释:LIKE 模式匹配操作符同样可以使用在WHERE子句的条件条件中。LIKE是一个功能强大的操作符,它可以让你选择你”喜欢”指定的行。百分号”%” 可以被用来匹配任何可能的字符,它可以出现在指定字符的前面或者后面,例如:

select first, last, city

from empinfo

where first LIKE ‘Er%’;

以上这条SQL语句将会匹配任何名字以’Er’开始的名字,这里必须使用单引号。

或者你也可以使用”%”在字符的前面,例如:

select first, last

from empinfo

where last LIKE ‘%s’;

这条SQL语句将会匹配任何名字以’s’结尾的名字。这个”%”的作用就跟DOS命令的”*”号很相似。

select * from empinfo

where first = ‘Eric’;

以上的SQL语句只选择first名字为’Eric’的行。

3、创建表

这个create table语句是用于创建一个新的表格。以下是一个简单创建表格语句的格式:

create table “tablename”

(“column1” “data type”,

“column2” “data type”,

“column3” “data type”);

如果你想使用可选的约束,创建表格的格式为:

create table “tablename”

(“column1” “data type” [constraint],

“column2” “data type” [constraint],

“column3” “data type” [constraint]);

[ ] = optional

这里注意:你可以任意创建多列的表格,这个条件是可选的。

为了更好的理解,下面举个例子:

create table employee

(first varchar(15),

last varchar(20),

age number(3),

address varchar(30),

city varchar(20),

state varchar(20));

为了创建一个新表格,你可以在关键字create table之后跟着表的名字,然后一个圆左括号”(”,然后是第一列的名字,再是这一列的数据类型,接着是任意的可选约束,最后是圆右括号”)”。确保在开始表格内容之前使用圆左括号并且在表的最后一列定义之后使用圆右括号是相当重要的。你还要保证每一个列定义之间有逗号分隔。最后在SQL语句结束时候加上分号”;”。

表格和列名必须以字母开头,第二个字符开始可以是字母、数字或者下划线,但是要保证名字的总长度不要超过30个字符。在定义表格和列名不要使用不要使用SQL预定的用于表格或者列名的关键字(比如”select”、”create”、 “insert”等等),以避免错误的发生。
数据类型是指在特定的列使用什么样数据的类型。如果一个列的名字为”Last_Name”,它是用来容纳人名的,所以这个特定列就应该采用”varchar” (variable-length character,变长度的字符型) 数据类型。

以下是几种常见的数据类型:

char(size) :固定长度的字符串型。Size是圆括号中指定的参数,它可以由用户随意设置,但是不能超过255个字节。

varchar(size) :变长度的字符串型。它的最大长度是由括号中的参数size设定的。

number(size):数值型。最大数字的位数由括号中的参数size设置。

date :日期数值型。

number(size,d) :数值型。它的最大数字的位数由括号中的参数sieze设定,而括号中的参数d是设置小数点的位数。

什么是约束呢?当表被创建的时候,可以一列也可以多列共用一个约束。约束是一个跟列有关的基本准则,返回的数据必须遵循这个准则。下面举个例子,一个约束指定在一列中不能有两个记录共用一个数值。它们必须单独的。其它两个流行的约束是:”not null”,它设置了列不能留空白,即一定要有数据;以及”primary key”(主键),主键约束定义了表中每一个记录(或行)的唯一标识。所有的这些将在以后的教程中再作进一步阐述。

4、插入数据到表

Insert语句用于往表格中插入或者增加一行数据,它的格式为:

insert into “tablename”

(first_column,…last_column)

values (first_value,…last_value);

[] = optional

简单举个例子:

insert into employee

(first, last, age, address, city)

values (‘Luke’, ‘Duke’, 45, ‘2130 Boars Nest’, ‘Hazard Co’);

这里要注意:每一个字符窜都要用单引号括起来。

为了往表中插入数据,要在关键字insert into之后紧跟着表名,然后是左圆括号,接着是以逗号分开的一系列的列名,再是一个右圆括号,然后在关键字values之后跟着一系列用圆括号括起的数值。这些数值是你要往表格中填入的数据,它们必须与指定的列名相匹配。字符串笔译用单引号括起来,而数字就不用。在上面的例子中,’Luke’必须与列first相匹配,而45必须与列age相匹配。

假如你想往employee表格中插入以下数据;

Zhang Weiguo,28,北京601信箱,北京

那么你要使用以下的SQL语句:

insert into employee

(first, last, age, address, city)

values (’ Zhang’, ’ Weiguo’ ,28, ‘北京601信箱’, ‘北京’);

5、删除表

Drop table命令用于删除一个表格或者表中的所有行。其语法格式为:

drop table “tablename”

下面举个例子:

drop table employee;

为了删除整个表(包括所有的行),可以使用drop table命令后加上tablename。Drop table命令跟从表中删除所有记录是不一样的:

删除表中的所有记录是留下表格(只是它是空的)以及约束信息;而drop table是删除表的所有信息,包括所有行、表格以及约束信息等等。

6、更新记录

Update语句用于更新或者改变匹配指定条件的记录,它是通过构造一个where语句来实现的。其语句格式如下:

update “tablename”

set “columnname” = “newvalue”[,”nextcolumn” = “newvalue2”…]

where “columnname” OPERATOR “value” [and|or “column” OPERATOR “value”];

[] = optional

下面举个例子来说明:

update phone_book

set area_code = 623

where prefix = 979;

以上语句是在phone_book表中,在prefix=979的行中将area_code设置为623。

7、删除记录

Delete语句是用来从表中删除记录或者行,其语句格式为:

delete from “tablename”

where “columnname” OPERATOR “value” [and|or “column” OPERATOR “value”];

[ ] = optional

下面还是举个例子:

delete from employee;

这条语句没有where语句,所以它将删除所有的记录,因此如果没有使用where的时候,要千万小心。

如果你只要删除其中一行或者几行,可以参考以下的语句:

delete from employee

where lastname = ‘May’;

这条语句是从emplyee表中删除lastname为’May’的行。

delete from employee

where firstname = ‘Mike’ or firstname = ‘Eric’;

这条语句是从emplyee表中删除firstname为’Mike’或者’Eric’的行。

为了从表中删除一个完整的记录或者行,就直接在”delete from”后面加上表的名字,并且利用where指明符合什么条件的行要删除即可。如果你没有使用where子句,那么表中的所有记录或者行将被删除。

8、合计函数
所有的合计函数如下表所示:
这里写图片描述

合计函数用于从SELECT语句中计算一个”返回列的数据”。它们是总结了所选数据列的结果。虽然它们需要”GROUP BY”子句,但是这些函数也可以在不用使用”GROUP BY”子句的情况被使用,比如 :

SELECT AVG(salary)

FROM employee;

这条语句将返回单一的结果,它包含了从employee表中所有salary列数据的平均值。为了更好的理解,我们再举个例子:

SELECT AVG(salary)

FROM employee;

WHERE title = ‘Programmer’;

以上这条语句将返回employee表中所有title列为’Programmer’的数据的平均值。

下面的例子中使用的语句跟其它合计函数有点不用,因为没有一个类被指定给COUNT函数。这条语句实际上将返回employee表的行数,如下:

SELECT Count(*)

FROM employees;

0 0
原创粉丝点击