目录
SQL命令一般分为DQL、DML、DDL几类。
DQL:数据查询语句,基本就是SELECT查询命令,用于数据查询。
DML : Data Manipulation Language的简称,即数据操纵语言,主要用于插人、更新、删除数据,所以也分为INSERT、UPDATE、DELETE三种语句。
DDL : Data Definition Language 的缩写,即数据定义语言,主要用于创建、删除,以
及修改表、索引等数据库对象语言。
每次执行的SQL可以由多条SQL命令组成。多条SQL命令之间由分号(“;”)分隔。每个SQL命令由一系列的记号组成,这些记号可以由关键字、标识符、双引号包围的标识符、常量、单引号包围的文本常量和特殊的字符等组成。在SQL命令里可以有注释,这些注释在PostgreSQL中等效于空白。
SQL命令并未严格地像计算机语言一样明确标识哪些是命令、哪些是操作数或参数。SQL的语法主要是让你比较直观地理解其意思。比如,查询一个表的数据,就是由“SELECT”+“要查询的各列”+“FROM表”这样的语法组成的。后面的几节会详细叙述sQL的用法。
3.2.1 建表语句
表是关系型数据库中最基本的对象,数据库中的表与实际生活中的二维表格很相似,有很多列也有很多行,每一列有一个名称,不同的列有不同的数据类型,比如,列可能是数字、文本字符串,也可能是日期类型。建表语句的一个简单语法如下:
- CREATETABLE table_name (
- co101_namme data_type,
- co102_namme data_type,
- co103_namme data_type,
- co104_namme data_type,};
其中“CREATE”、“TABLE”为关键字,是不变的,从字面上也很好理解,表示创建表。"table_name”表示表名,“col01_name”、 “" col02_name”、" col03_name "、 " col04_name”分别表示列名。" data_type”表示数据类型,不同的数据库系统有不同的数据类型名称,即使是相同意思的整数类型,在不同的数据库系统中也有不同的类型名称。变长的字符串在大多数数据库中都可使用“varchar”类型,比如PostgreSQL、MySQL 和 Oracle数据库等。整形数据在PostgreSQL和 MySQL都可以使用“int”类型。日期类型的名称一般为“date”。例如,要创建一张分数表score,包括“学生名称( student_name)”、“语文成绩( chinese_score)”、“数学成绩(math_score)”、“考试日期(test_date)”四列,则创建这个表的SQL 如下:
- CREATETABLE score (
- student_name varchar (40 ),
- chinese_score int,
- math_score int,test_date date);
如果按前面的安装步骤安装完了数据库,之后就可以使用psql工具连接到PostgreSQL数据库了,执行上面的建表语句,如下:
- osdba=# CREATE TABLE score (
- osdba(# student_name varchar (40),
- osdba(# chinese_score int,
- osdba(# math_score int,
- osdba(# test_date dateosdba(# );
- CREATE TABLE
- osdba=#
在psql中,可使用ld显示数据库中有哪些表,如下:
- osdba=# ld
- List of relations
- Schema | Name |Type | owner
- --------+-----―-+------―+-------
- public | score | table | osdba( 1 row)
这样就看到了我们建的表。
使用“ld score”可以显示这张表的定义情况:
- osdba=# ld score
- Table "public.score"
- Column | Type | Modifiers
- student__name | character varying (40) |
- chinese_score | integer |
- math_score | integer |
- test_date | date |
注意:显示列的类型“character varying(40)”实际上与“varchar(40)”的意思是完全一样的“int”与“integer”的意思也是一样的。
删除表的语法比较简单,如下:
DROP TABLE table_name;
其中“table_name”表示要删除的表名。假设要删除前面创建的表student,则可以使用下面的SQL:
DROP TABLE student;
可以使用下面的语句往前面创建的学生表(student)中插入数据:
INSERT INTO student VALUES(1,'张三',14) ;
由此可以看出,INSERT语句的语法为:以“INSERT INTO”关键字为首,后面跟表名,然后再跟“VALUES”关键字,最后是由小括号包围起来的以逗号分隔的各列数据,数据的顺序与表定义时表列的顺序是一样的。当然也可以在表名后指定要插入数据列的顺序,如下所示:
INSERT INTO student(no,age,student_name)VALUES(2,13,'李四');
在插人数据时,也可以指定某些列不插人数据,这时这些列的数据会被置为空,如下:
INSERT INTO student (no,student_name) VALUES(2,'王二');
如果在psql中执行了下面的语句,使用SELECT语句就可以查询出数据,查询的语句为:
SELECT * FROM student;
SELECT语句的具体用法会在后面的章节中介绍,现在只需要知道这么用就可以了。我们查看到的数据如下:
- osdba=# select * from student;
- no | student_name | age
- -———+-—------------+----
- | | 张三 | 14
- 2 | 李四 | 13
- 3 | 王二 |
- ( 3 rows)
从上面可以看出,在插入数据时,没有提供的列数据会被置为NULL。
假设要把student表中所有学生的年龄(age)更新为“15”,则更新语句如下:
UPDATE student SET age = 15;
从上面的语句可以看出,更新语句以“UPDATE”关键字开始,后面跟表名,然后是“SET”关键字,表示要设置的数据,再后面就是要设置的数据的表达式“age = 15”,设置数据的表达式也很简单,就是“列名=数据”的格式。
实际执行的效果如下:
- osdba=# UPDATE student SET age = 15;
- UPDATE 3
- osdba=# select * from student;
- no | student _name | age
- -—―一+-—------------+-----
- 1 | 张三 | 15
- 2 | 李四 | 15
- 3 | 王二 | 15
- (3 rows)
在更新数据时,还可以指定过滤表达式“WHERE”,从而指定更新哪条数据或哪些数据,比如,要更新学号(no)为3的学生年龄为14岁,则使用下面的语句:
UPDATE student SET age =14 WHERE no = 3;
在SET子句中,还可以同时更新多个列的值,如下所示:
UPDATE student SET age =13,student_name='王明充’ WHERE no = 3;
如果想删除学号(no)为3的记录,语句如下:
DELETE FROM student WHERE no = 3;
由此可见删除语句比较简单,以“DELETE FROM”开始,后面跟表名,然后加“WHERE"子句用于指定要删除的记录。
当然也可以没有“WHERE”子句,这表明要删除整个表的数据,删除表student 中所有数据的语句如下:
DELETE FROM student;