pgsql通过Navicat创建数据库表:样例
CREATE TABLE "public"."test_demo" (
"event_total" varchar(20) COLLATE "default",
"user_total" varchar(20) COLLATE "default",
"digit_total" varchar(20) COLLATE "default",
"click_total" varchar(20) COLLATE "default",
"organ_total" varchar(20) COLLATE "default",
"house_total" varchar(20) COLLATE "default",
"employ_total" varchar(20) COLLATE "default",
"close_date" numeric(4)
)
WITH (OIDS=FALSE)
;
ALTER TABLE "public"."test_demo" OWNER TO "postgres";
1---关键字
常用关键字:
冗余(Redundancy):存储两次数据,以便使系统更快速。
主键(Primary Key):主键是唯一的。同一张表中不允许出现同样两个键值。一个键值只对应着一行。
外键(Foreign Key):用于连接两张表。
2---连接方式:
表的连接方式:
内连接
外连接
自连接
3---两张表:
student表:
字段 解释
studentId 学号(主键)
name 姓名
phone 电话
collegeId 学生所在学院Id(外键)
SQL语句:
CREATE TABLE `student` (
`studentId` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`phone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`collegeId` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`studentId`),
KEY `collegeId` (`collegeId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
college表:
字段 解释
colleggeId 学院ID(主键)
collegeName 学院名
SQL语句:
CREATE TABLE `college` (
`collegeId` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`collegeName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`collegeId`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
4--内连接:
内连接:
内连接就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。语法如下:
SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
SELECT student.name,college.collegeName FROM student
INNER JOIN college ON student.collegeId = college.collegeId;
运行结果:
+——+————-+
| name | collegeName |
+——+————-+
| 张三 | 清华 |
| 李四 | 北大 |
| 王五 | 浙大 |
5---外连接:
外连接:
与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,
外连接又分为左连接和右连接两种情况。接下来,我们将介绍这两种连接方式。
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
SELECT student.name,college.collegeName FROM student
LEFT OUTER JOIN college ON student.collegeId = college.collegeId;
运行结果:
+——+————-+
| name | collegeName |
+——+————-+
| 张三 | 清华 |
| 李四 | 北大 |
| 王五 | 浙大 |
| 赵六 | NULL |
| 钱七 | NULL |
+——+————-+
6---右外连接:
右外连接:
右连接将会以右边作为基准,进行检索。语法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;
+——+————-+
| name | collegeName |
+——+————-+
| 张三 | 清华 |
| 李四 | 北大 |
| 王五 | 浙大 |
| NULL | 厦大 |
+——+————-+
表的别名:其实我们在查询的过程中,如果遇到了特别复杂的数据表名,我们可以通过取别名的方式来实现,使用的是我们以前使用过的【AS】语句,例如,我们的内连接就可以化简为下面的语句:
SELECT s.name,c.collegeName FROM student AS s INNER JOIN college AS c ON s.collegeId = c.collegeId;查询结果一致,
7---自连接:
SELECT * FROM student s ,student a where a.collegeId=s.collegeId AND a.name <> s.name ORDER BY a.collegeId;
需要连接的学生表如下:
运行结果如下:
+———–+——+——-+———–+———–+——+——-+———–+
| studentId | name | phone | collegeId | studentId | name | phone | collegeId |
+———–+——+——-+———–+———–+——+——-+———–+
| 4 | 赵六 | 136 | 11 | 1 | 张三 | 139 | 11 |
| 1 | 张三 | 139 | 11 | 4 | 赵六 | 136 | 11 |
| 5 | 钱七 | 135 | 22 | 2 | 李四 | 130 | 22 |
| 2 | 李四 | 130 | 22 | 5 | 钱七 | 135 | 22 |
————————————————
语句解释:
【student s】和【student a】的含义就是分别给我们的【student】表取了两个不同的别名;
【a.collegeId = s.collegeId AND a.name <> s.name 】的含义是找出【collegeId】相同,但是【name】不同的人.
【ORDER BY a.collegeId;】将结果顺序输出;
8---子查询:
子查询:
SELECT 列名1 ...FROM 表名 WHERE 列名 比较运算符 (SELECT 命令);
SELECT * FROM
(SELECT student.name,college.collegeName FROM student INNER JOIN college ON student.collegeId = college.collegeId)
b WHERE b.collegeName = ‘清华’;
运行结果如下:
+——+————-+
| name | collegeName |
+——+————-+
| 张三 | 清华 |
| 赵六 | 清华 |
+——+————-+