美文网首页
mysql:初识

mysql:初识

作者: 春暖花已开 | 来源:发表于2021-09-01 17:26 被阅读0次
# 创建数据库
CREATE DATABASE IF NOT EXISTS huya;

# 删除数据库
DROP DATABASE IF EXISTS huya;

# 展示所有的数据库
SHOW DATABASES;

# 查看数据表
SHOW TABLES;

# 使用一个数据库
USE huya;

# 查看正在使用的数据库
SELECT DATABASE();

# 查看如何创建的数据库
SHOW CREATE DATABASE huya;

# 创建数据表
CREATE TABLE IF NOT EXISTS student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    age INT DEFAULT 0,
    phone VARCHAR(20) DEFAULT '' UNIQUE NOT NULL
);

# 删除表
DROP TABLE IF EXISTS student;

# 更新表名
ALTER TABLE student RENAME TO t_student;

# 添加一个新列
ALTER TABLE t_student ADD addr VARCHAR(100);
# 添加一个表示创建时间的新列 
ALTER TABLE t_student ADD createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
# 添加一个跟随更新时间的新列 
ALTER TABLE t_student ADD updateTime TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

# 删除一列
ALTER TABLE t_student DROP addr;

# 修改列的名字
ALTER TABLE t_student CHANGE addr address VARCHAR(100);

# 修改列的数据类型 
ALTER TABLE t_student MODIFY phone INT;

# 往表里插入数据
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn1', 18, '13800138001', '深圳市宝安区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn2', 19, '13800138002', '深圳市福田区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn3', 20, '13800138003', '深圳市南山区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn4', 21, '13800138004', '深圳市南山区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn5', 22, '13800138005', '深圳市南山区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn6', 22, '13800138006', '深圳市龙岗区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn7', 23, '13800138007', '深圳市光明区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn8', 23, '13800138008', '深圳市龙岗区');
INSERT INTO t_student (name, age, phone,  address) VALUES ('lynn9', 22, '13800138009', '深圳市南山区');

UPDATE t_student SET age = 18 WHERE name = 'lynn9';

# 展示创建表的方式
SHOW CREATE TABLE t_student;

# 删除表的所有数据 
DELETE FROM t_student;

# 按条件删除数据 
DELETE FROM t_student WHERE name = 'lynn';

# 更新数据 
UPDATE t_student SET name = 'lily1', phone = '13800138001' WHERE phone = '18665865199';

# 查询
SELECT * FROM t_student;
SELECT name AS s_name, age AS s_age, phone as s_phone, address AS s_address from t_student;

# 双条件查询 
SELECT * FROM t_student WHERE age > 19 AND age < 22;

# 模糊查询: %表示任意个任意字符; _表示任意的一个字符
SELECT * FROM t_student WHERE address LIKE '___宝%';

# 查询结果排序 
SELECT * FROM t_student WHERE age >= 20 ORDER BY age DESC;

# 查询表的行数 
SELECT COUNT(*) FROM t_student;

# 分页查询 
SELECT * FROM t_student WHERE age >= 20 ORDER BY age ASC LIMIT 2 OFFSET 0;
SELECT * FROM t_student LIMIT 2 OFFSET 0; -- 限定的条数 偏移
SELECT * FROM t_student LIMIT 2 OFFSET 2;
SELECT * FROM t_student LIMIT 2 OFFSET 4;
SELECT * FROM t_student LIMIT 2 OFFSET 6;

SELECT * FROM t_student LIMIT 0, 2; -- 偏移, 限定的条数 
SELECT * FROM t_student LIMIT 2, 2;
SELECT * FROM t_student LIMIT 4, 2;


# 聚合函数 
SELECT ROUND(AVG(age),1) AS avgAge FROM t_student;
SELECT AVG(age) FROM t_student WHERE address LIKE '%宝安%';
SELECT MAX(age) FROM t_student WHERE age < 20;
SELECT SUM(age) FROM t_student;
SELECT COUNT(*) AS count, MAX(age) AS maxAge, address FROM t_student GROUP BY address;

# 可以用HAVING对筛选结果做一些约束
SELECT COUNT(*) AS count, MAX(age) AS maxAge, address FROM t_student GROUP BY address HAVING count > 2;

# 查询组装json 
SELECT address AS s_address, name AS s_name, age AS s_age, phone AS s_phone,
    JSON_OBJECT( 'name', name, 'age', age, 'phone', phone, 'address', address) as s_info
    FROM t_student WHERE age <= 18;
    
# 测试手机 
CREATE TABLE IF NOT EXISTS products(
    id INT PRIMARY KEY AUTO_INCREMENT,
    brand VARCHAR(20),
    title VARCHAR(100),
    price INT,
    score DOUBLE,
    voteCnt INT,
    url VARCHAR(100),
    pid VARCHAR(30),
    brand_id INT
)

# 将相同品牌的组装起来 
-- GROUP BY: 表示根据什么分组 
SELECT brand, 
    JSON_ARRAYAGG(JSON_OBJECT('brand', brand, 'title', title, 'price', price, 'score', score, 'url', url)) AS phones
    FROM products GROUP BY brand;

SELECT brand, COUNT(*) AS num, ROUND(AVG(price),2) AS avgPrice FROM products GROUP BY brand;

# 添加另一张表, 单独列出手机的名字/网址/世界排名: 用于关联手机
CREATE TABLE IF NOT EXISTS brand(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    website VARCHAR(100),
    worldRank INT
)


INSERT INTO brand (name, website, worldRank) VALUES ('华为', 'www.huawei.com', 1);
INSERT INTO brand (name, website, worldRank) VALUES ('小米', 'www.mi.com', 10);
INSERT INTO brand (name, website, worldRank) VALUES ('苹果', 'www.apple.com', 5);
INSERT INTO brand (name, website, worldRank) VALUES ('OPPO', 'www.oppo.com', 15);
INSERT INTO brand (name, website, worldRank) VALUES ('京东', 'www.jd.com', 3);
INSERT INTO brand (name, website, worldRank) VALUES ('Google', 'www.google.com', 8);


# 添加一个brand_id字段
ALTER TABLE products ADD brand_id INT;

# 将products中的brand_id关联到brand中的id的值
UPDATE products SET brand_id = 1 WHERE brand = '华为';
UPDATE products SET brand_id = 2 WHERE brand = '小米';
UPDATE products SET brand_id = 3 WHERE brand = '苹果';
UPDATE products SET brand_id = 4 WHERE brand = 'OPPO';

ALTER TABLE products DROP brand_id;
DROP TABLE IF EXISTS brand;

# 创建products的外键
ALTER TABLE products ADD FOREIGN KEY (brand_id) REFERENCES brand(id);
ALTER TABLE products ADD FOREIGN KEY (brand_id) REFERENCES brand (id)
    ON UPDATE CASCADE 
    ON DELETE RESTRICT;

# 可以在设计表中查看外键的名字 
ALTER TABLE products DROP FOREIGN KEY products_ibfk_1;

# 查看创建表的语句 
SHOW CREATE TABLE products;
SHOW CREATE TABLE brand;

SELECT COUNT(*) FROM products WHERE brand = 'vivo' OR brand = '锤子科技';

# 多表查询 
SELECT * FROM products, brand;
SELECT * FROM products, brand WHERE products.brand_id = brand.id;

# 左连接 
SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id;
SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id WHERE products.brand_id IS NULL;

# 右连接 
SELECT * FROM products RIGHT JOIN brand ON products.brand_id = brand.id;

# 内连接 
SELECT * FROM products INNER JOIN brand;
SELECT * FROM products INNER JOIN brand ON products.brand_id = brand.id;


-- # 测试多对多查询 
# 创建学生表 
CREATE TABLE IF NOT EXISTS students(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    age INT
)

# 创建课程表 
CREATE TABLE IF NOT EXISTS courses(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    price DOUBLE NOT NULL
)

INSERT INTO students (name, age) VALUES('lynn', 18); 
INSERT INTO students (name, age) VALUES('tom', 22); 
INSERT INTO students (name, age) VALUES('lilei', 25); 
INSERT INTO students (name, age) VALUES('lucy', 16); 
INSERT INTO students (name, age) VALUES('lily', 20);

INSERT INTO courses (name, price) VALUES ('英语', 100); 
INSERT INTO courses (name, price) VALUES ('语文', 666); 
INSERT INTO courses (name, price) VALUES ('数学', 888); 
INSERT INTO courses (name, price) VALUES ('历史', 80);
 
# 创建关系表 
CREATE TABLE IF NOT EXISTS students_select_courses(
    id INT PRIMARY KEY AUTO_INCREMENT,
    student_id INT NOT NULL,
    course_id INT NOT NULL,
    FOREIGN key (student_id) REFERENCES students(id) ON UPDATE CASCADE,
    FOREIGN KEY (course_id) REFERENCES courses(id) ON UPDATE CASCADE
)

# lynn 选修了 英文和数学
INSERT INTO students_select_courses (student_id, course_id) VALUES (1, 1); 
INSERT INTO students_select_courses (student_id, course_id) VALUES (1, 3);
# lilei选修了 语文和数学和历史
INSERT INTO students_select_courses (student_id, course_id) VALUES (3, 2); 
INSERT INTO students_select_courses (student_id, course_id) VALUES (3, 3); 
INSERT INTO students_select_courses (student_id, course_id) VALUES (3, 4);


# 查询lynn选择的课程 
SELECT stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice 
    FROM students stu 
    JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    JOIN courses cs ON ssc.id = cs.id
    WHERE stu.id = 1;

SELECT stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
    FROM students stu 
    LEFT JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    LEFT JOIN courses cs ON ssc.id = cs.id
    WHERE stu.name = 'lynn';
    
# 组装成对象: 如果为null, 就转化一下 
SELECT stu.id, stu.name, stu.age,
    JSON_ARRAYAGG(JSON_OBJECT('csId', IFNULL(cs.id, -1), 'csName', IFNULL(cs.name, ''))) as courses
    FROM students stu
    LEFT JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    LEFT JOIN courses cs ON ssc.course_id = cs.id
    GROUP BY stu.id;
    

# 组装成对象 
SELECT stu.id, stu.name, stu.age,
    JSON_ARRAYAGG(JSON_OBJECT('csId', cs.id, 'csName', cs.name)) as courses
    FROM students stu
    LEFT JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    LEFT JOIN courses cs ON ssc.course_id = cs.id
    WHERE cs.id IS NOT NULL
    GROUP BY stu.id;
    
# 查询哪些学生没有选课 
SELECT stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
    FROM students stu 
    LEFT JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    LEFT JOIN courses cs ON ssc.id = cs.id
    WHERE cs.id IS NOT NULL;
    
# 查询哪些课没有被学生选择 
SELECT stu.id studentId, stu.name studentName, cs.id courseId, cs.name courseName, cs.price coursePrice
    FROM students stu 
    RIGHT JOIN students_select_courses ssc ON stu.id = ssc.student_id 
    RIGHT JOIN courses cs ON ssc.id = cs.id
    WHERE stu.id IS NULL;

UPDATE students_select_courses SET course_id = 1 WHERE id = 3;

SELECT * FROM students_select_courses;
SELECT * FROM courses;

相关文章

  • MySQL实战

    第1章 初识MySQL 启动MySQL服务 net start mysql(服务名) 关闭MySQL服务 net ...

  • 初识MySQL

    mysql 配置 mysql扩展名:window下为my.ini;Mac 下为my.cnf在/etc目录下port...

  • 初识Mysql

    简介:Mysql是一个开源的关系型数据库管理系统,开源意味着是免费的,关系型数据库是以行和列来存储数据,就像是ex...

  • 初识MySQL

    基本术语解析 服务器:通俗理解就是提供服务的机器。跟电脑类似,由cpu、内存、硬盘组成。但在安全性、稳定性、可操作...

  • 初识mysql

    SQL SQL 是用于访问和处理数据库的标准的计算机语言。是一种结构化的查询语言。通过SQL我们可以访问数据库和处...

  • 初识 MySQL

    MySQL 是一种关系型数据库,是开源免费的,且方便扩展,任何人都可以在 GPL(General Public L...

  • 初识MySQL

    MySQL的优势1.运行速度快2.使用成本低3.容易使用4.可移植性强 MySQL目录1.bin文件:存放可执行文...

  • 初识Mysql

    知道Mysql很多年了,也用了很多年了,但是没有真正深入了解过,这次开始通过《高性能Mysql》学习Mysql,下...

  • 初识MySQL

  • 初识MySQL

    为什么要使用数据据库 ·登录界面·用户信息查询~ 对比 ~数据,集合,内存的易失性 断电丢失文件 可以存,查询不便...

网友评论

      本文标题:mysql:初识

      本文链接:https://www.haomeiwen.com/subject/vsxfwltx.html