Datawhale MySQL 训练营 Task3 表操作
学习内容
1.MySQL 表数据类型
MySQL 支持数值、日期时间和字符串三种类型。
具体的类型说明可以参考菜鸟教程的总结
2. 用SQL语句创建表
CREATE TABLE table_name
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL DEFAULT 0.00,
prod_desc TEXT(1000) NULL
);
语句解释
- CREATE TABLE name 设定表的名字;
- 列 定义在圆括号内,列与列之间用 , 分隔;
- 需要指明列的的类型、大小和约束
类型包括数值、字符和日期类型;
NULL / NOT NULL 表示是否允许该列缺值;如果不指定NOT NULL 则默认 NULL;DEFAULT 指明默认值。
- 设定主键
参考
建表时使用 primary key 来指明
CREATE TABLE tableName(
id INT PRIMARY KEY
);
-- OR
CREATE TABLE tableName(
id INT,
PRIMARY KEY (id)
);
建完表之后,增加主键
ALTER TABLE tableName ADD PRIMARY KEY(id)
3. 用SQL语句向表中添加数据
INSERT INTO table_name
VALUES(xxxxx);
语句解释: 向表中插入数据,数据在VALUES 子句中给出;VALUES 按照创建表的列的顺序填写(这样会不安全);
- 指定列名(推荐使用这种方式)
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
没有指明的列是空的(要求没指出的列允许空或者有默认值);
4. 用SQL语句删除表
DROP TABBLE table_name;
语句解释, DROP 永久删除表,没有确认也不能撤销;
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete。
DELETE 删除行
DROP 删除表
TRUNCATE 保留表,删除数据
5. 用SQL语句修改表
ALTER TABLE
- 修改列名
-- 将test字段改为test1
-- ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件
ALTER TABLE user10 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123';
- 修改表中数据
--修改列类型
ALTER TABLE tableName
ALTER COLUMN columnName VARCHAR(4000)
--修改数据
update 表名 set 列名='需要修改的值' where 列名='原来的值'
- 删除行
DELETE FROM 表名称
WHERE 列名称 = 值
- 删除列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
- 新建列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
- 新建行
INSERT INTO tablename [(columns, ...)]
VALUES(values, ...)
- 重命名表
ALTER TABLE test RENAME test1
作业
- 1.项目三:超过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名学生的课。
Note:
学生在每个课中不应被重复计算。
解答:
CREATE TABLE courses(
student VARCHAR(64) NOT NULL,
class VARCHAR(20)
);
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','Computer');
INSERT INTO courses VALUES('G','Math');
INSERT INTO courses VALUES('H','Math');
INSERT INTO courses VALUES('I','Math');
INSERT INTO courses VALUES('A','Math');
SELECT class
FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student)>=5
- 2.项目四:交换工资(难度:简单)
创建一个 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 |
CREATE TABLE salary(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR NOT NULL,
salary int
);
INSERT INTO salary VALUES(1,'A','m',2500);
INSERT INTO salary VALUES(2,'B','f',5500);
INSERT INTO salary VALUES(3,'C','m',5000);
INSERT INTO salary VALUES(4,'D','f',1500);
INSERT INTO salary VALUES(5,'E','f',2000);
UPDATE salary
SET sex =
CASE
WHEN sex='f' THEN 'm'
WHEN sex='m' THEN 'f'
ELSE sex
END;
SELECT * FROM salary;
参考链接
参考了以下博客
Datawhale MySQL 训练营 Task3 表操作的更多相关文章
- Datawhale MySQL 训练营 Task4 表联结
学习内容 MySQL别名 列别名,将查询或者筛选出来列用AS 命名,如果有空格则需要引号 '' SELECT xxx AS xxxx FROM WHERE GROUP BY HAVING 表别名, 把 ...
- MySQL之多表操作
前言:之前已经针对数据库的单表查询进行了详细的介绍:MySQL之增删改查,然而实际开发中业务逻辑较为复杂,需要对多张表进行操作,现在对多表操作进行介绍. 前提:为方便后面的操作,我们首先创建一个数据库 ...
- mysql 库与表操作
1. 库操作 1.1. 创建数据库 语法规则:create database 库名; CREATE DATABASE dt55; 在创建库时,希望指定编码语法:create database 库名 c ...
- 数据库之 MySQL --- 数据处理 之 表操作、CRUD(六)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一. 表操作 创建数据库CREATE DATABASE demo-- 删除数据库DROP DATABAS ...
- python爬取信息到数据库与mysql简单的表操作
python 爬取豆瓣top250并导入到mysql数据库中 import pymysql import requests import re url='https://movie.douban.co ...
- 学习MySQL之单表操作(二)
##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...
- Mysql之数据表操作
数据表操作: 查看当前数据库中所有的表: show tables; 查看当前使用数据库: select database(); 使用数据表: use 表名; 创建数据表: create table 数 ...
- Mysql之库表操作(胖胖老师)
SQL概念:结构化查询语言(SQL = Structured Query Language),也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统ps: ...
- MySQL删除超大表操作
======================================================================== 问题原因 通常情况下,会使用innodb_file_p ...
随机推荐
- Angular总结一:环境搭建
工欲善其事必先利其器,开发 Angular 项目首先要搭建环境.Angular 的环境搭建包括三个方面,开发环境 WebStorm,命令行工具 Angular CLI,以及 nodejs. 一.安装 ...
- Linux改变文件所有者
Linux改变文件所有者 #把当前路径下jsportal文件夹及下的所有文件的所有者改为appmanager组下的appmanager用户.chown -R -v appmanager:appmana ...
- 在Ubuntu Desktop中安装软件
1. 安装好虚拟机后,可以先打开firefox,看是否可以访问外部的网页. 2. 如果在公司内网,可能访问不起,需要添加代理,确保可以访问外部的网页. 3. 更新软件源 sudo apt update ...
- vue async/await同步 案例
1.async/await场景 这是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面时. 2.名词解释 >async async的用法,它作为一个关键字放到函数 ...
- ab网站压力测试命令的参数、输出结果的中文注解
ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力. ab命令对发出负载的计算机要求很低,既不会占用很 ...
- 64. [Mcoi2018]终末之诗(上)
Description 求出\(k^{k^{k^{k^{...}}}} \pmod p\) 的结果 扩展欧拉定理:\[a^x=a^{min(x,x\%\varphi(p)+\varphi(p))}(m ...
- 通过应用程序域AppDomain加载和卸载程序集
微软装配车的大门似乎只为货物装载敞开大门,却将卸载工人拒之门外.车门的钥匙只有一把,若要获得还需要你费一些心思.我在学习Remoting的时候,就遇到一个扰人的问题,就是Remoting为远程对象仅提 ...
- 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:
(1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化. (2)Point2D有一个void型成员方法offs ...
- 404 Note Found队Beta3
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- bapi获取物料的可用数量及MRP信息(MD04)
需求:在报表里面添加可用数量字段,数据来源于MD04. 使用到的bapi:MD_STOCK_REQUIREMENTS_LIST_API 这个bapi可以查看到MRP信息以及可用数量. bapi需要的参 ...