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 ...
随机推荐
- git使用,在ubuntu中
#安装sudo apt install git要先到github官网建一个账号. #配置 你的github git config --global user.name "fanbrightu ...
- AE-----合成
AE-----合成 大纲:
- ganache-cli
安装: npm install -g ganache-cli@6.1.8 使用: userdeMacBook-Pro:~ user$ ganache-cli -m "success rifl ...
- vue中兄弟之间组件通信
我们知道Vue中组件之间的通信有很多方式,父子之间通信比较简单,当我们使用vuex时候,兄弟组件之间的通信也很好得到解决 当我们项目较小时候,不使用vuex时候Vue中兄弟组件之间的通信是怎样进行的呢 ...
- jQuery内容横向拖拽滚动
如果有业务需求:使用横向滚动,而又不想用滚动条,可以使用横向拖拽滚动,主要是利用元素的scrollLeft特性: 废话不多说直接上代码: css: .box{ width:100%; height:3 ...
- react中受控组件相关的warning
在表单中,报如下的错,意思是非受控的输入框变成了受控的,报错信息如下 Warning: A component is changing an uncontrolled input of type te ...
- Python spli指定多个分隔符
#!/usr/bin/python # -*- coding: UTF-8 -*- import re a='Beautiful, is; better*than\nugly' 以竖线"|& ...
- Google 历年笔试面试30题
1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1).设计一个函数void g ...
- jquery animate() Alternate 语法
前段时间在使用jQuery的animate() 函数时候用到Alternate方式.主要是要让数字自增到指定大小,且能看见数字增加过程. 一般使用如下方式: function autoPlusAnim ...
- C# 获取北京时间 (根据纪元时间(1970/1/1)转换为DateTime)
根据纪元时间(1970/1/1)转换为DateTime WebClient wc = new WebClient(); s= wc.DownloadString("http://api.ti ...