MySQL基础(二)

学习内容:

  1. MySQL表数据类型
  2. 用SQL语句创建表
    语句解释
    设定列类型 、大小、约束
    设定主键
  3. 用SQL语句向表中添加数据
    语句解释
    多种添加方式(指定列名;不指定列名)
  4. 用SQL语句删除表
    语句解释
    DELETE
    DROP
    TRUNCATE
    不同方式的区别
  5. 用SQL语句修改表
    修改列名
    修改表中数据
    删除行
    删除列
    新建列
    新建行

案例1

1.创建如下所示的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

2.示例代码

#创建courses
-- CREATE TABLE courses ( student VARCHAR ( 10 ) NOT NULL, class VARCHAR ( 10 ) NOT NULL );

示例
courses表
插入数据:

INSERT INTO courses
VALUES
	( "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(student)>=5;

(HAVING
对由sum或其它集合函数运算结果的输出进行限制).
在这里插入图片描述
2.交换工资(难度:简单)
创建一个 salary表,如下所示,有m=男性 和 f=女性的值
id name sex salary
1 A m 2500
2 B f 1500
3 C m 5500
4 D f 500

示例代码:
创建薪资表:
CREATE TABLE salary (
id INT PRIMARY KEY NOT NULL,
NAME VARCHAR ( 10 ) NOT NULL,
sex VARCHAR ( 10 ) NOT NULL,
salary INT NOT NULL
);

结果如下:
薪资表
插入数据:

INSERT INTO salary
VALUES
	( 1, "A", "m", 2500 ),
	( 2, "B", "f", 1500 ),
	( 3, "C", "m", 5500 ),
	( 4, "D", "f", 500 );

结果如下:
在这里插入图片描述
更新数据:

UPDATE salary 
SET sex =
CASE
		sex 
	WHEN 'm' THEN
	'f' ELSE 'm' END;

结果如图

表连接

  • MySQL别名
  • INNER JOIN
  • LEFT JOIN
  • CROSS JOIN
  • 自连接
  • UNION
    1.表连接:总览如下:
    在这里插入图片描述
    2.项目:
    项目五:组合两张表 (难度:简单)
    在数据库中创建表1和表2,并各插入三行数据(自己造)

表1: Person
列名 类型
PersonId int
FirstName varchar
LastName varchar
PersonId 是上表主键

表2: Address
列名 类型
±------------±--------+t
| AddressId | int |
| PersonId | int |
| City | varchar |

AddressId 是上表主键

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

示例代码:
建表插入数据:

#person
CREATE TABLE person(PersonId INT,
        FirstName VARCHAR(10),
        LastName VARCHAR(10));
#address
CREATE TABLE address(AddressId INT,
        PersionId INT,
        City VARCHAR(10),
        State VARCHAR(10));
#数据
INSERT INTO person VALUES (1,'kobe','bryant'),
            (2,'lebron','james'),
            (3,'chris','paul');
#插入数据
INSERT INTO address VALUES(001,1,'Los Angeles','california'),
            (002,2,'Cleveland Cavaliers','Ohio'),
            (003,2,'Houston','Texas');

全部连接:

SELECT
	FirstName,
	LastName,
	City,
	State 
FROM
	person
	LEFT JOIN address ON person.PersonId = address.PersionId;
UNION
SELECT
	FirstName,
	LastName,
	City,
	State 
FROM
	person
	RIGHT JOIN address ON person.PersonId = address.PersionId;

左右连接查询:

#左连接查询
SELECT FirstName, LastName, City, State FROM 
        person LEFT JOIN address ON person.PersonId=address.PersionId; 
				
#右连接
SELECT FirstName, LastName, City, State FROM 
        person RIGHT JOIN address ON person.PersonId=address.PersionId; 

在这里插入图片描述

删除重复的邮箱

删除重复的邮箱(难度:简单) 编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

Id Email
1 [email protected]
2 [email protected]
3 [email protected]
Id 是这个表的主键。

CREATE TABLE email ( id INT PRIMARY KEY, Email VARCHAR ( 20 ) );
INSERT INTO email ( id, Email )
VALUES
	( 1, '[email protected]' ),
	( 2, '[email protected]' ),
	( 3, '[email protected]' );
DELETE 
FROM
	email 
WHERE
	id NOT IN ( SELECT t.tid FROM ( SELECT MIN( id ) AS tid FROM email GROUP BY Email ) t );

Id Email
1 [email protected]
2 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章