MySQL基础表操作与表联结
文章目录
- MySQL基础知识
- 基础表操作
- MySQL基本数据类型
- 创建和操纵表
- 插入数据
- 更新和删除数据
- 表联结
- 创建联结
- 叉联结(cross join)
- 内联结(inner join)/等值联结(equijoin)
- 自联结(self-join)
- 自然联结(natural join)
- 外联结(outer join)
- 实践项目(我使用的是navicat for mysql)
- 基础表操作
- 表联结
MySQL基础知识
基础表操作
MySQL基本数据类型
| 类型 | 大小(字节) | 说明 |
|---|---|---|
| TINYINT | 1 | 小整数值 |
| SMALLINT | 2 | 大整数值 |
| MEDIUMINT | 3 | 大整数值 |
| INT | 4 | 大整数值 |
| BIGINT | 8 | 极大整数值 |
| FLOAT | 4 | 单精度浮点数值 |
| DOUBLE | 8 | 双精度浮点数值 |
| CHAR | 0-255 | 定长字符串 |
| VARCHAR | 0-65535 | 变长字符串 |
| TINYBLOB | 0-255 | 二进制形式的短文本数据 |
| BLOB | 0-65535 | 二进制形式的长文本数据 |
| MEDIUMBLOB | 0-16777215 | 二进制形式的中等长度文本数据 |
| LONGBLOB | 0-4294967295 | 二进制形式的极大文本数据 |
| TINYTEXT | 0-255 | 短文本数据 |
| TEXT | 0-65535 | 长文本数据 |
| MEDIUMTEXT | 0-16777215 | 中等长度文本数据 |
| LONGTEXT | 0-4294967295 | 极大文本数据 |
| DATE | 3 | 日期值(YYYY-MM-DD) |
| TIME | 3 | 时间值或持续时间(HH:MM:SS) |
| YEAR | 1 | 年份值(YYYY) |
| DATETIME | 8 | 日期加时间值(YYYY-MM-DDhh:mm;ss) |
| TIMESTAMP | 8 | 时间戳(YYYYMMDDhhmmss) |
创建和操纵表
每个DBMS(数据库管理系统)的操作语句有所不同,不过差得不多。以下是标准SQL语句,某些语句若无法在你的DBMS运行,请参阅相应DBMS文档。
- 创建表CREATE TABLE
CREATE TABLE 新表名
(列名 列的定义
);CREATE TABLE products
(prod_id CHAR(10) NOT NULL,prod_name CHAR(254) NOT NULL
);
- 更新表ALTER TABLE
#增加列
ALTER TABLE 表名
ADD 列名 数据类型;ALTER TABLE products
ADD vend_id CHAR(10);#删除列
ALTER TABLE 表名
DROP COLUMN 列名;ALTER TABLE products
DROP COLUMN prod_name;#删除表
DROP TABLE 表名;DROP TABLE products;
插入数据
- 插入完整的行
INSERT INTO 表名
VALUES(依序符合规范的各列数据,用逗号隔开);INSERT INTO customers
VALUES('10001','Tom','New York','USA',NULL);
- 插入部分行
INSERT INTO 表名(希望插入数据的列名,用逗号隔开)
VALUES(对应列的规范数据,用逗号隔开);INSERT INTO customers(cust_id,cust_country)
VALUES('10001','UAS');
- 插入检索出的数据
INSERT INTO 表名1(检索出的数据存放的列名,用逗号隔开)
SELECT 检索的列名
FROM 表名2;INSERT INTO customers(cust_id,cust_name)
SELECT new_cust_id,new_cust_name
FROM newcust;
- 从一个表复制到另一个表SELECT INTO
SELECT 列名
INTO 表名1
FROM 表名2;SELECT *
INTO cust_copy
FROM customers;
更新和删除数据
- 更新数据UPDATE
UPDATE 表名
SET 列名=新值
WHERE 过滤条件;UPDATE customers
SET cust_email = 'tom@store.com'cust_contact = 'roberts'
WHERE cust_id = '10001';#删除某个值,可以设置它为NULL
UPDATE customers
SET cust_email = NULL
WHERE cust_id = '10002';
- 删除数据DELETE
#删除某一行数据
DELETE FROM 表名
WHERE 过滤条件;DELETE FROM customers
WHERE cust_id ='10004';
DELETE删除整行而不是删除列,如果想要删除列使用UPDATE语句,如果删除整个表使用TRUNCATE TABLE
表联结
如果数据存储在多个表中,怎样用一条 SELECT语句就检索出数据呢?答案是使用联结。 简单说, 联结是一种机制,用来在一条 SELECT语句中关联表,因此称为联结。使用特殊的语法,可以联结多个表返回一组输出, 联结在运行时关联表中正确的行。
创建联结
SELECT 需要显示的列名,可以来自不同表
FROM 表名
WHERE 不同表的关联方式;SELECT vend_name,prod_name,prod_price
FROM vendors,products
WHERE vendors.vend_id = products.vend_id;
叉联结(cross join)
返回笛卡儿积的联结,也称叉联结( cross join)。
内联结(inner join)/等值联结(equijoin)
等值联结( equijoin),它基于两个表之间的相等测试。 这种联结也称为内联结( inner join)。
SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;
自联结(self-join)
自联结通常作为外部语句,用来替代从相同表中检索数据的使用子查询语句。
自然联结(natural join)
标准的联结(内联结)返回所有数据,相同的列甚至多次出现。自然联结排除多次出现,使每一列只返回一次。
自然联结要求你只能选择那些唯一的列,一般通过对一个表使用通配符( SELECT*),而对其他表的列使用明确的子集来完成。
外联结(outer join)
联结包含了那些在相关表中没有关联行的行。 这种联结称为外联结。
在使用 OUTERJOIN语法时,必须使用 RIGHT或 LEFT关键字指定包括其所有行的表( RIGHT指出的是OUTERJOIN右边的表,而LEFT指出的是OUTERJOIN左边的表)。
不同联结之间的关系可参阅这篇文章:一文搞懂SQL中的各种联结——内联结、自然联结、自联结、交叉联结
以上内容参考于《SQL必知必会》提取码: xymn,如需更深入了解可以查看书籍,这本书简短明了,你可以在十分钟以内看完你希望了解的某一章节。
实践项目(我使用的是navicat for mysql)
基础表操作
练习一:创建一个courses表,查询出所有超过或等于5名学生的课。
- 创建表

- 输入数据

- 查询操作及结果

练习二:创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
| id | name | sex | salary |
|---|---|---|---|
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。**
- 创建表

- 输入数据

- 交换操作

表联结
练习三:组合两张表
- 创建两张表Person\Address

- 分别在两张表中插入数据

- 联结表并输出查询信息

练习四:删除如下email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小的那个
| Id | |
|---|---|
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
-
创建表

-
输入数据

-
删除重复邮箱(自联结方法)

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!



