Mysql 第三次作业

本文详细介绍MySQL中的表操作,包括数据类型的使用、表的创建、数据的增删改查及表联结等内容。通过实例讲解如何运用SQL语句完成表的各项操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:
贪心报了好几个班,没有时间实际操作了,所以这篇博客就是一些知识点的粘贴,后期会单独出一个博客写Mysql班所有项目的代码,请见谅。

一.表操作

1. MySQL表数据类型

1.1字符串类型:CHAR、TEXT

  • 定长字符串:接受长度固定的字符串,在创建表时指定其长度。定长列不允许多于指定的字符数目,缺少的字符长度用空格填充或根据需要补为NULL。
  • 变长字符串:存储任意长度的文本,只有指定的数据得以保存。优点是灵活,缺点是性能。
  • 字符串值必须括在单引号内。

1.2 数值类型

  • 如:BIT(二进制)、DECIMAL(或NUMERIC)、FLOAT(或NUMBER)、INT等。
  • 数值不应该括在引号内

1.3 日期和时间类型

  • 每种DBMS能识别自己特定的日期格式,请参阅相应文档。
  • 如:DATE、DATETIME(或TIMESTAMP)、TIME等。

1.4二进制类型

  • 可包含任何数据,甚至可包含二进制信息,如图像、多媒体、字处理文档等。
  • 如:BINARY、 (LONG) RAW、VARBINARY等。

2. 用SQL语句创建表

2.1.创建语句语法

CREATE TABLE table_name (column_name column_type);

2. 2. 语句解释

  • 表名紧跟CREATE TABLE关键字。

2.3一些设定

  • 实际的表定义(所有列)括在圆括号中,各列之间用逗号分隔。
  • 每列的定义以列名开始,后跟列的数据类型。
  • 允许NULL值就是允许该列有缺值,NOT NULL就是不接受没有列值的行。
  • 设定主键:只有不允许NULL值得列可作为主键

3. 用SQL语句向表中添加数据

3.1添加一行的MySQL INSERT 语句

  • 语法:
INSERT INTO table_name (column1,column2...)
VALUES (value1,value2,...);
  • 语句解释
    INSERT INTO的括号方列名,这是可选的,建议指定列名,不同列名用逗号分隔,最后一列后面没有逗号。
    VALUES的括号里面放对应列的对应值,如果前面没有指明列,则按位置,依次插入。注意字符型数据要加单引号或者双引号。

3.2 添加多行

INSERT INTO table_name (column1,column2...)
VALUES (value1,value2,...),
     (value1,value2,...)

3.3 利用SELECT子句添加多行

INSERT INTO table_1
SELECT c1, c2, FROM table_2;

4.用SQL语句删除表

4.1 三种删除方法

删除操作很简单,但是一定要确实是否需要使用WHERE子句,否则整表将被删除。

  • DROR
DROP TABLE table_name;
  • DELETE
DELETE FROM table_name;
或者
DELETE * FROM table_name;
  • TRUNCATE
TRUNCATE TABLE table_name

4.2 不同方法的区别

DROP:删除表数据和表本身。真正意义上的删除表,操作前一定要小心。
DELETE:删除一行或者多行数据,不删除表本身。
TRUNCATE:仅删除表内数据,不删除表本身。

  • 小结
    (1)DROP TABLE table_name : 删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;
    (2)TRUNCATE TABLE table_name : 删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和 MyISAM;
    (3)DELETE FROM table_name : 删除表全部数据,表结构不变,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;
    (4)DELETE FROM table_name WHERE XXX : 带条件的删除,表结构不变,不管是 innodb 还是 MyISAM 都不会释放磁盘空间;
    (5)DELETE 操作以后,使用 optimize TABLE table_name 会立刻释放磁盘空间,不管是 innodb 还是 myisam;
    (6)DELETE FROM 表以后虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以使用这部分空间。

5. 用SQL语句修改表

5.1 修改列名

ALTER TABLE TABLE_NAME  RENAME COLUMN OLD_COLUMN_NAME TO NEW_COLUMN_NAME;

5.2 修改表中数据

UPDATE table_name SET column1=value1,column2=value2,...
WHERE some_column=some_value;

5.3 删除行

DELETE FROM table_name WHERE some_column=some_value;

5.4删除列

如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):

ALTER TABLE table_name DROP COLUMN column_name

5.5 新建列

alter table 表名 add column 列名 varchar(20) not null;--插入在最后一列
alter table 表名 add column 列名 varchar(20) not null after column1;--插在column1列后面
alter table 表名 add column 列名 varchar(20) not null first;--插入到第一列

5.6 新建行

INSERT INTO table_name VALUES (value1,value2,value3,...);

二. 表联结

1. MySQL别名

1.1 为表取别名

查询数据时,如果表名很长,使用起来不方便,此时,就可以为表取一个别名,用这个别名来代替表的名称

SELECT * FROM 表名 [AS] 别名; 
--注意,为表指定别名,AS关键字可以省略不写

1.2 为字段取别名

在查询数据时,为了使显示的查询结果更加直观,可以为字段取一个别名 。

SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,……] FROM 表名; 
--注意,为字段指定别名,AS关键字可以省略不写

2. INNER JOIN

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
在这里插入图片描述

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name;

MySQL的INNER JOIN 也可以省略 INNER 使用 JOIN,效果一样。

3. LEFT JOIN

MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。如果右表中没有匹配,则结果为 NULL。
在这里插入图片描述

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name;

注释:MySQL中 LEFT JOIN 和 LEFT OUTER JOIN 两者等价,推荐使用 left join。

4. CROSS JOIN

CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。

SELECT * FROM TableA CROSS JOIN TableB ;

笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

实际上,在 MySQL 中(仅限于 MySQL) CROSS JOIN 与 INNER JOIN 的表现是一样的,在不指定 ON 条件得到的结果都是笛卡尔积,反之取得两个表完全匹配的结果。
INNER JOIN 与 CROSS JOIN 可以省略 INNER 或 CROSS 关键字,因此下面的 SQL 效果是一样的

... FROM table1 INNER JOIN table2
... FROM table1 CROSS JOIN table2
... FROM table1 JOIN table2

5. 自连接

自连接就是一个表和它自身进行连接,是多表连接的特殊情况。
在自连接查询中,要先在FROM字句中为表分别定义两个不同的别名,然后使用这两个别名写出一个连接条件,条件比较在同一个表中的情况。

SELECT DISTINCT c1.CouNo 课程编号, c1.CouName 课程名称, c1.Kind 课程类别,c1.DepartNo 系部编号
FROM Course c1 JOIN Course c2 ON c1.Kind=c2.Kind  
AND c1.DepartNo!=c2.DepartNo ORDER BY c1.CouNo;

6. UNION

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

/*参数
expression1, expression2, ... expression_n: 要检索的列。
tables: 要检索的数据表。
WHERE conditions: 可选, 检索条件。
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
*/

7.以上各种方式的区别

http://justcode.ikeepstudying.com/2016/08/mysql-图解-inner-join、left-join、right-join、full-outer-join、union、union-all的区别/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值