Datawhale组队学习之MySQL-task2

1. MySQL表数据类型
---->数据类型定义了列可以存储哪些数据种类。
MySQL表中数据类型有:
1.1,数值类型:
MySQL中支持多种整型,其实很大程度上是相同的,只是存储值的大小范围不同而已。
tinyint:占用1个字节,相对于java中的byte
smallint:占用2个字节,相对于java中的short
int:占用4个字节,相对于java中的int
bigint:占用8个字节,相对于java中的long
其次是浮点类型即:float和double类型
float:4字节单精度浮点类型,相对于java中的float
double:8字节双精度浮点类型,相对于java中的double
1.2,字符串类型:
char(n) 定长字符串,最长255个字符。n表示字符数
varchar(n) 变长字符串,最长不超过 65535个字节,n表示字符数。
text,一般超过255个字节,会使用text类型。
1.3,日期类型:
date:年月日
time:时分秒
datetime:年月日 时分秒
timestamp:时间戳(实际存储的是一个时间毫秒值),与datetime存储日期格式相同。

2. 用SQL语句创建表

语句解释
设定列类型 、大小、约束
设定主键

---->create table uesr(
id int primary key,-- 列名id,数据类型为数值类型int;大小:占用4个字节;约束:主键约束
username varchar(50) unique,-- 列名username,数据类型为字符类型vatchar;大小:字符串长度最大50;约束:唯一约束
password varchar(50) not null – 列名password,数据类型为字符类型vatchar;大小:字符串长度最大50;约束:非空约束
);

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

语句解释
多种添加方式(指定列名;不指定列名)
指定列名:insert into user(id,username,password) values(1,'吴奇隆','wql244');
不指定列名:insert into user values(2,'刘诗诗','lss276');

4. 用SQL语句删除表

语句解释
DELETE:
删除表记录:delete from stu where id=1;DROP:
1,删除库:drop database if exits mydb1;
2,删除表:drop table if exits stu;
TRUNCATE:

删除表中所有记录: truncate table stu

不同方式的区别:
drop是用于删除库及删除表, 和删除表记录没有关系

delete和truncate都是用于删除表记录
delete和truncate删除表记录的区别:
(1)delete可以通过where进行筛选, 可以只删除符合条件, 但truncate是删除所有记录, 不能删除一部分.
(2)delete也可以删除所有记录, 但是对id的自增变量没有影响, 及时删除所有记录, 下次插入记录, id还会接着以前的id进行自增
但是truncate是先摧毁整张表, 再重新创建, id的自增变量也会从1开始!!
5. 用SQL语句修改表
修改表:修改表指的是修改数据库中已经存在的数据表的结构。MySQL 使用 ALTER TABLE 语句修改表。常用的修改表的操作有修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

修改列名:alter table stu rename student;
修改表中数据:update stu set score=score+10;
删除行:delete from stu whrere id=2;
删除列:alter table test drop  column height;
新建列:alter table stu add  column name varchar(10);
新建行:insert into (id) values(4);

#作业#

项目三:超过5名学生的课(难度:简单)

创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
例如,表:
drop database if exists task2;
create database task2 charset utf8;
show databases;
use task2;
drop table if exists courses;
create table courses(
student varchar(20),-- 学生
class varchar(50) – 学科
);
insert into courses values(‘A’,‘Math’);
insert into courses values(‘B’,‘English’);
insert into courses values(‘C’,‘Math’);
insert into courses values(‘D’,‘Biology’);
insert into courses values(‘E’,‘Math’);
insert into courses values(‘F’,‘Compute’);
insert into courses values(‘G’,‘Math’);
insert into courses values(‘H’,‘Math’);
insert into courses values(‘I’,‘Math’);
insert into courses values(‘A’,‘Math’);

±--------±-----------+
| student | class |
±--------±-----------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
| A | Math |
±--------±-----------+

编写一个 SQL 查询,列出所有超过或等于5名学生的课。
应该输出:
—>select class from courses group by class having count(DISTINCT student) >= 5;
±--------+
| class |
±--------+
| Math |
±--------+
Note:
学生在每个课中不应被重复计算。

项目四:交换工资(难度:简单)

创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
例如:
create table salary(
id int primary key ,
name varchar(20) unique,
sex varchar(50) not null,
salary int
);
insert into salary values(1,‘A’,‘m’,2500);
insert into salary values(2,‘B’,‘f’,1500);
insert into salary values(3,‘C’,‘m’,5500);
insert into salary values(4,‘D’,‘f’,500);

id name sex salary
1 A m 2500
2 B f 1500
3 C m 5500
4 D f 500

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

id name sex salary
1 A f 2500
2 B m 1500
3 C f 5500
4 D m 500

项目五:有趣的电影 (难度:简单)

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

例如,下表 cinema:

±--------±----------±-------------±----------+
| id | movie | description | rating |
±--------±----------±-------------±----------+
| 1 | War | great 3D | 8.9 |
| 2 | Science | fiction | 8.5 |
| 3 | irish | boring | 6.2 |
| 4 | Ice song | Fantacy | 8.6 |
| 5 | House card| Interesting| 9.1 |
±--------±----------±-------------±----------+
对于上面的例子,则正确的输出是为:
----->select * from cinema where description!=‘boring’ and id%2 != 0 order by rating desc;

±--------±----------±-------------±----------+
| id | movie | description | rating |
±--------±----------±-------------±----------+
| 5 | House card| Interesting| 9.1 |
| 1 | War | great 3D | 8.9 |
±--------±----------±-------------±----------+

2.2 MySQL 基础 (三)- 表联结**#学习内容#**

  • MySQL别名:
    可以为表添加别名以方便书写
    select…
    from A a, B b…
    where…
    上面小写的a和b就是A和B表的别名

  • INNER JOIN
    inner join…on…叫做内连接查询

  • LEFT JOIN

  • CROSS JOIN:左外连接查询

  • 自连接

  • UNION:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

  • 以上几种方式的区别和联系

#作业#

项目六:组合两张表 (难度:简单)

在数据库中创建表1和表2,并各插入三行数据(自己造)
表1: Person
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| PersonId | int |
| FirstName | varchar |
| LastName | varchar |
±------------±--------+
PersonId 是上表主键

表2: Address
±------------±--------+
| 列名 | 类型 |
±------------±--------+
| AddressId | int |
| PersonId | int |
| City | varchar |
| State | varchar |
±------------±--------+
AddressId 是上表主键

create table person(PersonId int,
FirstName VARCHAR(10),
LastName VARCHAR(10));
create table address(AddressId INT,
PersionId int,
City varchar(10),
State varchar(10));
—插入数据—
insert into person values (1,‘吴’,‘某某’),
(2,‘张’,‘某某’),
(3,‘陈’,‘某某’);
insert into address values(001,1,‘台湾’,‘中国’),
(002,2,‘香港’,‘中国’),
(003,2,‘澳门’,‘中国’);
—联表查询—
----->
SELECT FirstName, LastName, City, State FROM
person LEFT JOIN address ON person.PersonId=address.PersionId;

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State

项目七:删除重复的邮箱(难度:简单)

编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 **Id ***最小 *的那个。
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
Id 是这个表的主键。

—建表:
CREATE TABLE email(id INT PRIMARY KEY,Email VARCHAR(20));
—插入数据:
INSERT INTO email(id,Email) VALUES(1,‘a@b.com’),(2,‘c@d.com’),(3,‘a@b.com’);
—删除重复的邮箱:
DELETE FROM email WHERE
id NOT IN(
SELECT t.tid FROM(
SELECT MIN(id) AS tid FROM email GROUP BY Email) t
);

例如,在运行你的查询语句之后,上面的 Person表应返回以下几行:
±—±-----------------+
| Id | Email |
±—±-----------------+
| 1 | a@b.com |
| 2 | c@d.com |
±—±-----------------+

项目八:从不订购的客户 (难度:简单)

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

Customers 表:

±—±------+
| Id | Name |
±—±------+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
±—±------+
Orders 表:

±—±-----------+
| Id | CustomerId |
±—±-----------+
| 1 | 3 |
| 2 | 1 |
±—±-----------+
---->
SELECT Name AS Customers FROM Customers
LEFT JOIN Orders ON Customers.Id = Orders.CustomerId
WHERE Orders.CustomerId IS NULL;
例如给定上述表格,你的查询应返回:

±----------+
| Customers |
±----------+
| Henry |
| Max |
±----------+

项目九:超过经理收入的员工(难度:简单)

Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。

±—±------±-------±----------+
| Id | Name | Salary | ManagerId |
±—±------±-------±----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
±—±------±-------±----------+
给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。
---->Select e1.Name as Employee from Employee e1 , Employee e2 where e1.ManagerId = e2.Id and e1.Salary > e2.Salary

±---------+
| Employee |
±---------+
| Joe |
±---------+

Datawhale组队学习之MySQL-task2相关推荐

  1. 第8期Datawhale组队学习计划

    第8期Datawhale组队学习计划马上就要开始啦 这次共组织15个组队学习,涵盖了AI领域从理论知识到动手实践的内容 按照下面给出的最完备学习路线分类,难度系数分为低.中.高三档,可以按照需要参加 ...

  2. Datawhale组队学习周报(第047周)

    本周报总结了从 2021年01月03日至2022年01月09日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. ...

  3. Datawhale组队学习周报(第041周)

    本周报总结了从 11月22日至11月28日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 31 期组队学习 ...

  4. Datawhale组队学习周报(第040周)

    本周报总结了从 11月15日至11月21日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 31 期组队学习 ...

  5. Datawhale组队学习周报(第038周)

    本周报总结了从 11月01日至11月07日,Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 30 期组队学习 ...

  6. Datawhale组队学习周报(第035周)

    希望开设的开源内容 目前Datawhale的开源内容分为两种:第一种是已经囊括在我们的学习路线图内的Datawhale精品课,第二种是暂未囊括在我们的学习路线图内的Datawhale打磨课.我们根据您 ...

  7. Datawhale组队学习周报(第032周)

    希望开设的开源内容 目前Datawhale的开源内容分为两种:第一种是已经囊括在我们的学习路线图内的Datawhale精品课,第二种是暂未囊括在我们的学习路线图内的Datawhale打磨课.我们根据您 ...

  8. Datawhale组队学习周报(第021周)

    本文总结了本周(07月05日~07月11日)Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 25 期组队学习 ...

  9. Datawhale组队学习周报(第019周)

    本周(06月21日~06月27日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有 292 人,其中 web开发入门教程.数据挖掘实战(异常检测) 已经结营,另外一 ...

最新文章

  1. Javascript学习总结三(Array对象的用法)
  2. 收藏/一文弄清楚强弱电机房位置大小及布置如何选择?
  3. oralce创建用户
  4. python写web自动化_Web接口开发与自动化测试——基于Python语言
  5. 纳米计算机存储量,纳米计算-人们需要知道的一切!
  6. 用户和组相关的配置文件总结
  7. 【微机原理与接口技术】具体芯片(1)并行接口8255A(2):控制字概述
  8. 题解-Codeforces671D Roads in Yusland
  9. Zookeeper及客户端的基本操作
  10. 这是一位拿到BAT大厂offer应届生的年终总结,那么你的呢?...
  11. oracle函数应用,oracle函数应用
  12. 大华条码秤开发之-快捷键传输
  13. 2021-05-22
  14. 【JS】moment.min.js
  15. 计算机系统(一)期末复(yu)习(3):LC-3汇编,输入与输出
  16. 随手笔记Cookie
  17. matlab m序列扩频,基于matlab的移位寄存器法m序列的产生
  18. 刘韧:和人物共同创作人物故事
  19. 体育教学与计算机技术的结合点,浅析计算机技术在高校体育教学中的应用
  20. CocoaPods安装firebase的问题记录

热门文章

  1. Vue和SuperSlide做轮播效果
  2. 航测无人机-任务规划模块 竞品分析
  3. 用计算机制作多媒体作品使用的素材都必须,制作多媒体作品(选择题).doc
  4. 【Python】—— pipenv使用小结
  5. MySQL如何统计表格的总行数
  6. 互联网业务实战(一)--今日头条文章发布实现
  7. html5相册制作成视频,怎么把照片制作成视频,视频相册制作免费软件|特效多多...
  8. html简单的任务管理系统实现,用Javascript实现Windows任务管理器的代码
  9. centos 架设虚拟服务器,centos虚拟主机搭建(centos搭建网站)
  10. 春节入境澳门旅客料增1成 景点拥挤须提高警惕