目录
查询student表中所有数据的语句为:
select no,student_name,age from student;
其中“SELECT”是关键字,表示要查询,后面跟多个列名,各列之间使用逗号分隔。其后的“FROM”是关键字,后面跟表的名称。各个列可以是表的列名,也可以是一个表达式,如下:
select age+5 from student;
表达式中可以包括表的列,也可以只是一个与表列无关的表达式,如下:
select no,3+5 from student;
当表达式与表的列无关时,在PostgreSQL和 MySQL中可以不使用“FROM表名”,这样一来,就可以当作计算器使用了:
- osdba=# select 55+88 ;
- ?column ?
- ----------
- 143
- (1 row)
-
- osdba-# select 10*2,3*5+2;
- ?column ? | ?column ?
- ----------+----------
- 20 | 17
- (1 row)
如果想查询表中所有列的数据,则可以使用“*”代表所有列,如下:
select * from student;
SELECT语句后面可以通过指定WHERE子句来指定要查询哪条记录或哪些记录。比如,要查询学号为3的记录,其SQL语句为:
- osdba=# SELECT *FROM student where no=3;
- no | student_name | age
- -——-+--------------+-----
- 3 | 王明充 | 13
- ( 1 row)
在WHERE条件中也可以使用大于、小于的表达式。比如,想查询年龄大于等于15岁的学生,其语句如下:
- osdba=# SELECT * FROM student where age >= 15;
- no | student_name | age
- ----+--------------+-―-
- 1 | 张三 | 15
- 2 | 李四 | 15
- ( 2 rows)
使用INSERT INTO.…. SELECT语句可以把数据从一张表插入到另一张表中,这个语句属于DML语句。
假设建了一张学生表的备份表:student_bak
- CREATE TABLE student_bak(no int primary key,student_name varchar(40),age int,
- class_no int);
可以使用下面的语句把数据备份到下面这张备份表中:
INSERT INTO student_bak SELECT *FROM student ;
可以将从两张表查询出来的数据整合在一个结果集下,如:
- SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak
- where no = 2;
这里的语法比较简单,把两个SQL用“UNION”关键字连接起来就可以了。
结果如下:
- osdba=# SELECT * FROM student WHERE no = 1 UNION SELECT* FROM student_bak
- where no =2;
- no | student_name | age | class_no
- --―--+-―------------+---―-+----------
- 1 | 张三 | 14 | 1
- 2 | 吴二 | 15 | 1
- ( 2rows)
注意,UNION可以把结果集中相同的两条记录合并成一条:
- osdba=#SELECT* FROM student WHERE no = 1 UNION SELECT* FROM student_bak
- where no = 1;
- no | student_name | age | class_no
- --―--+-―------------+---―-+----------
- 1 | 张三 | 14 | 1
- (1 row)
如果不想合并,请使用UNION ALL,如下:
- osdba=# SELECT * FROM student WHERE no = 1 UNION ALL SELECT * FROM
- student_bak where no = 1;
- no | student_name | age | class_no
- --―--+-―------------+---―-+----------
- 1 | 张三 | 14 | 1
- 1 | 张三 | 14 | 1
TRUNCATE TABLE语句的用途是清空表内容。不带WHERE条件子句的DELETE语句也表示清空表的内容。从执行结果看,两者实现了相同的功能,但两者实现的原理是不一样的。
TRUNCATE TABLE是DDL语句,即数据定义语句,相当于用重新定义一个新表的方法把原先表的内容直接丢弃了,所以TRUNCATE TABLE执行起来很快,而DELETE是DML语句,可以认为DELETE是把数据一条一条地删除,若要删除很多行数据,就会比较慢。
如果想把表student_bak 中的数据清理掉,则可以使用如下命令:
TRUNCATE TABLE student_bak;