数据库相关操作

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 |
+——+————-+
| 张三 | 清华 |
| 赵六 | 清华 |
+——+————-+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值