这是参加本次课程的第三篇作业,之前的作业都写在别的地方了,以后准备写在csdn。
mysql数据类型
mysql的数据类型主要分为三类,数值、字符串、日期与时间
数值型
#### 日期及时间型
#### 字符型
mysql创建表语句
创建表的时候需要我们给出以下内容
- 表名
- 表中列的信息,例如列的数据类型,能否为空
CREATE TABLE students(
stu_id VARCHAR(50) NO NULL,
stu_name VARCHAR(50) NO NULL,
class VARCHAR(50) NO NULL,
PRIMARY KEY ("stu_id")
)
使用上面的语句就可以创建一个表了,在CREATE TABLE后面给出表名,括号中内容是新表的字段名与属性,同时后面需要设置字段的数据类型、大小、约束等属性。有一个很重要的点,就是最后一个语句之后不能跟逗号。否则会数据库管理系统会报错。
我们也看到了,最后有PRIMARY KEY关键字,这个关键字的作用是规定表的主键为stu_id字段。
主键:一张表中表示行的唯一性的一个列或是一组列。
向表中插入数据
想要实现向表中插入数据可以使用INSERT INTO语句。
INSERT INTO studens (
stu_id,
stu_name,
class) VALUE(
"001",
"nero",
"one"
)
使用上面的方式就可以向表中插入一行数据,如果你插入的是完整的一行,其实字段名是可省略的。同时如果你不需要插入完整的一行数据,只需向指定的某几列数据插入内容,只需写你需要插入的列的字段名即可,VALUE后面写需要插入的值。
上面是插入完整的一行数据,那如果我们需要插入检索出的数据怎么办,其实INSERT INTO也是支持WHERE的。
INSERT INTO students (
stu_name,
class
)VALUE(
"godfrey",
"two"
)WHERE stu_id = 002;
上面的语句就是将内容插入到通过WHERE检索到的行中。
删除表&删除表中的数据
删除表
想要删除一张数据表的话,可以使用DROP TABLE关键字,只要在后面跟上表名即可。
DROP TABLE students
删除表中的数据
删除表中的一行数据需要DELETE语句
DELETE FROM students
WHERE stu_id = 001;
上面这个语句就删除了学号为001的学生数据。其中WHERE是可选的,如果不加WHERE的话,就删除掉了整个表中的数据,但是表没有被删除。
删除数据使用注意事项:
最好是加上WHERE语句,除非你就是要删除整张表中的数据。
使用SQL修改表
修改列名
ALTER TABLE students CHANGE stu_id id VARCHAR(50);
上面的语句表示将students表中的stu_id列修改为id,并且后面提供了数据类型
修改列定义
ALTER TABLE students MODIFY stu_id INT;
上面的语句表示将students表中的stu_id列数据类型更改为INT型
修改表中数据
想要修改表中已有的数据可以使用UPDATE语句
UPDATE students
SET stu_name = 'cindy',
class = 'math'
WHERE stu_id = 001;
这条语句表示将查询到stu_id为001的数据姓名更改为cindy,课程更改为math。
删除一行数据
DELETE FROM students
WHERE stu_id = 001;
删除一条语句,需要提供表名和需要删除的信息。需要注意的一点是最好加上WHERE语句,否则会将表中的数据全部清空。
删除列
ALTER TABLE students DROP COLUMN class;
这条语句表示删除sutdents中的class列。
添加列
ALTER TABLE students ADD COLUMN teacher varchar(50);
这条语句表示向表添加一行名为teacher的列。
表联结
表联结的基础:关系表
概括的说,关系表就是在表中引用另一个表的数据,这样便不需要在多张表中出现重复的数据了。而且简化了表的管理,想要修改某个字段,只需更改一张表中的数据即可,这样相当于整个数据库的这个数据都会更新了。
表联结的类型
MySQL表联结的类型主要有这么几种,内联结、外联结、自联结、交叉联结几种。
几种联结的关系与区别
从大的概念上面区分联结可以分为两种,就是内联结与外联结。
-
内联结又称为等值联结,就是根据给出的条件来判断是否联结的。如果满足条件,则两个表中的两个满足条件的数据组合在一起。
-
如果不给出限制条件,则内联结返回的结果与交叉联结结果是一样的。而交叉联结返回的是两个表的笛卡尔积。
-
自联结可以理解为将一张表当作两张表联结起来,你可以像操作两张表一样去操作一张表的联结。
-
其中外联结又分为左联结与右联结。左联结与右联结是差不多的,我们拿左联结举例,就是说左边的表中的数据都会被展示出来,其中表中的数据若是满足则会与右表做联结,剩下的不满足条件就不做联结,右侧是NULL。
作业二:
题目:
code:
CREATE TABLE courses (
students VARCHAR(50) NOT NULL,
class VARCHAR(50) NOT NULL
);
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 * FROM courses;
SELECT class,Count(*) AS count
FROM courses
GROUP BY class
HAVING COUNT(*) >= 5;
结果:
作业三:
题目:
code:
CREATE TABLE salary(
id INT(10) NOT NULL,
name VARCHAR(50) NOT NULL,
sex VARCHAR(50) NOT NULL,
salary INT(50) NOT NULL,
PRIMARY KEY (id)
);
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);
SELECT * FROM salary;
UPDATE salary SET sex = (CASE
WHEN sex = 'f' THEN 'm'
WHEN sex = 'm' THEN 'f'
END);
结果:
作业五
题目:
code:
--创建Person表
CREATE TABLE Person (
PersonId INT NOT NULL PRIMARY KEY,
FirstName VARCHAR(20) NULL,
LastName VARCHAR(20) NULL
);
INSERT INTO Person (PersonId, FirstName, LastName) VALUES (1, 'Carine', '
Schmitt'), (2, 'Jean', 'King'), (3, 'Jeff', 'Young');
--创建Address表
CREATE TABLE Address (
AddressId INT NOT NULL PRIMARY KEY,
PersonId INT NULL,
City VARCHAR(50) NULL,
State VARCHAR(50) NULL);
INSERT INTO Address (AddressId, PersonId, City, State) VALUES (11, 3, 'Na
ntes', 'NV'), (12, 2, 'NYC', 'NY'), (13, 1, 'Melbourne', 'CA');
--使用内联结查询
SELECT FirstName,LastName,City,State
FROM Person INNER JOIN Address ON Person.PersonId = Address.PersonId;
结果:
作业六
题目:
code:
--本质是使用自联结查询出相同的email数据
DELETE e1 FROM email e1, email e2
WHERE e1.Email = e2.Email AND e1.Id > e2.Id;
结果: