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
    1. 项目四:交换工资(难度:简单)
      创建一个 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;

参考链接

参考了以下博客

  1. https://www.cnblogs.com/huangxm/p/5736807.html

猜你喜欢

转载自www.cnblogs.com/sunchaothu/p/10459012.html