1.MySQL表数据类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
2. 用SQL语句创建表
语句解释:通过CREATE TABLE来实现
设定列类型 、大小、约束
设定主键
3. 用SQL语句向表中添加数据
语句解释:通过INSERT INTO来实现
多种添加方式(指定列名;不指定列名):
参考https://blog.csdn.net/xad707348125/article/details/45073821
4. 用SQL语句删除表
语句解释:删除表就会删除表中所有数据,需谨慎。
DELETE:可以被事务管理 ,在事务中删除数据可以回滚恢复,原理: 一行一行删除数据记录
DROP:删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。把表的结构也删除了 下次要使用的时候要重新创建表的结构再插入数据
TRUNCATE:删除记录后不可恢复的,不受事务管理,原理:先删除整个表,重新创建
不同方式的区别:
在实际应用中,三者的区别是明确的。
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.
5. 用SQL语句修改表
修改列名:通过ALTER TABLE table name
CHANGE 旧属性名 新属性名旧数据类型
修改表中数据:修改字段名称:
sp_rename ‘表名.原字段表名’,‘表名.新字段表名’
例如我想把Card_Info表里面的OnDate改为Date:
sp_rename ‘Card_Info.OnDate’,’Card_Info.Date’
修改字段名为非空
alter table 表 alert column [字段名] 字段类型 not null
如我想把Card_Info表里面的Time数据类型改为允许为空:
alter table Card_Info alter column Time time(0) null
改为非空就是后面改为not null;
增加字段名
alert table [表名] add [字段名] 字段属性
例如我想在CancelCard_Info表里面加一个IsCheck是否结账名;
alter table CancelCard_Info add IsCheck varchar(10)
修改数据类型
alert table 表名 alert column 列名 数据类型
例如我想把Card_Info表里面的Time数据类型由time(7)改为time(0)
alter table Card_Info alter column Time time(0)
删除行:使用ALTER TABLE table_name
DROP 属性名
删除列:alter table actor drop column last_name;
新建列:alter TABLE table_name add column 列名 varchar(10);
新建行:alter TABLE table_name add 行名 varchar(10);
项目三:超过5名学生的课(难度:简单)
创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
例如,表:
±--------±-----------+
| student | class |
±--------±-----------+‘’
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
| A | Math |
±--------±-----------+
编写一个 SQL 查询,列出所有超过或等于5名学生的课。
应该输出:
±--------+
| class |
±--------+
| Math |
±--------+
Note:
学生在每个课中不应被重复计算。
项目四:交换工资(难度:简单)
创建一个 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,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
运行你所编写的查询语句之后,将会得到以下表:
id | name | sex | salary |
---|---|---|---|
1 | A | f | 2500 |
2 | B | m | 1500 |
3 | C | f | 5500 |
4 | D | m | 500 |
2.2 MySQL 基础 (三)- 表联结
#学习内容#
MySQL别名:
可以为表名称或列名称指定别名。别名用AS关键字赋予。
INNER JOIN
内联接,INNER JOIN 关键字在表中存在至少一个匹配时返回行。
INNER JOIN 与 JOIN 是相同的。
LEFT JOIN
左连接:LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
CROSS JOIN
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
自连接
UNION
以上几种方式的区别和联系
#作业# 待续
项目五:组合两张表 (难度:简单)
在数据库中创建表1和表2,并各插入三行数据(自己造)
表1: Person
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
±------------±--------+
PersonId 是上表主键
表2: Address
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
±------------±--------+
AddressId 是上表主键
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
-- 建立表Person
mysql> CREATE TABLE IF NOT EXISTS Person(
-> PersonID INT NOT NULL,
-> FirstName VARCHAR(255),
-> LastName VARCHAR(255),
-> PRIMARY KEY (PersonID)
-> );
Query OK, 0 rows affected (0.17 sec)
-- 写入Person数据
mysql> INSERT INTO person(PersonID, FirstName, LastName)
-> VALUES(101, '三', '张'),
-> (102, '四', '李'),
-> (103, '五', '王');
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
-- 建立表Address
mysql> CREATE TABLE IF NOT EXISTS Address(
-> AddressID INT NOT NULL,
-> PersonID INT,
-> City VARCHAR(255),
-> State VARCHAR(255),
-> PRIMARY KEY (AddressID)
-> );
Query OK, 0 rows affected (0.16 sec)
-- 插入表Address数据
mysql> INSERT INTO Address(AddressID, PersonID, City, State)
-> VALUES(333, 101, 'WuHan', 'CN'),
-> (444, 102, 'GuiLin', 'CN'),
-> (555, 104, 'NewYork', 'USA');
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
项目六:删除重复的邮箱(难度:简单)
编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
Id 是这个表的主键。
例如,在运行你的查询语句之后,上面的 Person表应返回以下几行:
±—±-----------------+
| Id | Email |
±—±-----------------+
| 1 | a@b.com |
| 2 | c@d.com |
±—±-----------------+
-- 创建表email
mysql> CREATE TABLE IF NOT EXISTS email(
-> ID INT NOT NULL AUTO_INCREMENT,
-> Email VARCHAR(255),
-> PRIMARY KEY(ID)
-> );
Query OK, 0 rows affected (0.23 sec)
-- 添加数据
mysql> INSERT INTO email(Email)
-> VALUES('a@b.com'),
-> ('c@d.com'),
-> ('a@b.com');
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> DELETE e2
-> FROM email AS e2, email AS e1
-> WHERE e2.Email=e1.Email AND e2.ID>e1.ID;
Query OK, 1 row affected (0.06 sec)
mysql> SELECT *
-> FROM email;
+----+---------+
| ID | Email |
+----+---------+
| 1 | a@b.com |
| 2 | c@d.com |
+----+---------+