MySQL任务三

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=女性的值 。
例如:

idnamesexsalary
1Am2500
2Bf1500
3Cm5500
4Df500

交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
运行你所编写的查询语句之后,将会得到以下表:

idnamesexsalary
1Af2500
2Bm1500
3Cf5500
4Dm500

在这里插入图片描述
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 |
+----+---------+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值