Mysql基础语法-建库-建表(增、删、改、查、表关联及子查询)
前言:MySQL是一个数据库管理系统,也是一个关系数据库。它是由Oracle支持的开源软件,MySQL可以在各种平台上运行UNIX,Linux,Windows等。可以将其安装在服务器甚至桌面系统上。 此外,MySQL是可靠,可扩展和快速的,如果您开发网站或Web应用程序,MySQL是一个不错的选择(强烈建议使用)。
建库:
语法:
CREATE DATABASE IF NOT EXISTS '指定库名' DEFAULT CHARSET UTF8;
例:
CREATE DATABASE IF NOT EXISTS dbtest DEFAULT CHARSET UTF8;
解析:
CREATE - 创建
DATABASE - 库
IF NOT EXISTS - 如果不存在则创建
DEFAULT - 默认
CHARSET - 字符集
UTF8 - 可变长度字符编码(支持部分中文)
创建一个名字为'dbtest'的库指定默认字符编码为UTF8格式
指定库
USE dbtest;
指定为dbtest库(让数据库知道你在使用此库,之后查询和建表都会在此库)
建表
语法:
CREATE TABLE IF NOT EXISTS '表名' ('字段名称' '数据类型','字段名称' '数据类型')
ENGINE=INNODB DEFAULT CHARSET=UTF8;
例:
CREATE TABLE IF NOT EXISTS studentinfo
(
id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
name VARCHAR(20) NOT NULL,
age INT NOT NULL,
gender VARCHAR(5) NOT NULL,
birthday DATE NOT NULL,
phone VARCHAR(30) NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
解析:
TABLE - 表
ENGINE=INNODB - 数据库存储引擎
PRIMARY KEY - 主键
AUTO_INCREMENT - 自增
NOT NULL - 不可为空
NULL - 可以为空
INT - 整型数据类型(阿拉伯数字)
VARCHAR('指定字段长度') - 字符串数据类型(字母、中文、符号)
DATE - 日期类型(格式:2022-01-01)
创建一个学生表指定数据库储存引擎字符编码为UTF8格式、有字段(id,姓名,年龄,性别,生日,电话)
插入数据(增)
语法:
--单条数据插入
INSERT INTO '表名' ('指定插入字段') VALUES ('按照前面的指定按顺序插入对应');
例:
INSERT INTO studentinfo (name,age,gender,birthday,phone) VALUES ('张三',23,'男','1987-05-01',18874562135);
--多条数据插入
INSERT INTO '表名' ('指定插入字段')
VALUES
('按照前面的指定按顺序插入对应-数据1'),
('按照前面的指定按顺序插入对应-数据2'),
('按照前面的指定按顺序插入对应-数据3'),
('按照前面的指定按顺序插入对应-数据4'),
('按照前面的指定按顺序插入对应-数据5'),
('按照前面的指定按顺序插入对应-数据6'),
('按照前面的指定按顺序插入对应-数据7');
例:
INSERT INTO studentinfo (name,age,gender,birthday,phone)
VALUES
('张三',23,'男','1987-05-01',18874562135),
('李四',19,'男','2002-08-11',14796325674),
('王五',24,'男','1991-05-01',14756895552),
('赵四',21,'男','1999-05-01',18956235412),
('小明',69,'男','2001-05-01',13875652325),
('小红',18,'女','2003-05-01',18745632565),
('小丽',22,'女','2000-05-01',19856987456);
解析:
INSERT INTO - 插入
插入数据7条数据到学生表里面
注:我这里id字段是自增的、他会自己自增可以不插入、也可以不指定插入字段,那么必须按照顺序插入表的所有字段,除非字段是NULL(可以为空)
查询数据(查)
语法:
--全表查询
SELECT * FROM '表名';
例:
SELECT * FROM studentinfo;
结果:(如图)
解析:
SELECT - 查询
从学生表查询全表数据(*代表全部数据)
--分别查询学生表所有男生、女生
查询男生:
SELECT (name) FROM studentinfo WHERE gender='男';
结果:(如图)
查询女生:
SELECT (name) FROM studentinfo WHERE gender='女';
结果:(如图)
解析:
WHERE - 后面跟需要查询的条件
*换成name就是不查询整张表的信息,只查询name字段
--查询年龄大于20岁的数据
SELECT * FROM studentinfo WHERE age > 20;
结果:(如图)
--查询生日大于1995年的数据
SELECT * FROM studentinfo WHERE YEAR(birthday) < 1995;
结果:(如图)
解析:
YEAR - 年份函数
可以理解成这里做了一个强制类型转换,把日期类型转换成YEAR类型
--查询电话号码是以18开头的数据
SELECT * FROM studentinfo WHERE phone LIKE '18%';
结果:(如图)
解析:
LIKE - MySQL中的谓词
主要是针对VARCHAR字符型字段的,在一个字符型字段列中检索包含对应子串的。
% - 通配符、代表匹配0个或多个任意字符
--查询姓小的同学和名字中带明的同学(这里就可以用到刚刚提到的like了)
SELECT * FROM studentinfo WHERE name LIKE '小%'
UNION
SELECT * FROM studentinfo WHERE name LIKE '%明%';
结果:(如图)
解析:
UNION - 合并两个或多个 SELECT 语句的结果集
--查询男生的平均年龄
SELECT SUM(age)/COUNT(*) FROM studentinfo WHERE gender='男';
结果:(如图)
解析:
COUNT - 统计函数
SUM - 求和函数
平均年龄=总年龄和/个数
修改表数据(修改)
语法:
UPDATE '表名' SET '需要修改的字段结果' WHERE '条件';
--修改小明的年龄为18岁
UPDATE studentinfo SET age=18 WHERE name='小明';
结果:(如图)
解析:
UPDATE - 修改
修改学生表数据年龄字段为18、条件是姓名为小明的数据;
删除表数据(删除)
语法:
DELETE FROM '表名' WHERE '条件';
--删除年龄是18-20岁的数据
DELETE FROM studentinfo WHERE age>17 AND age<21;
结果:(如图)
解析:
DELETE - 删除
AND - 与(二个条件必须满足)
表关联查询
条件:必须是二个或以上的表进行关联,必须有关联字段
示例:
我这里有二张表(如下图):
图一:(websites表)
图二:(acceaa_log表)
--内关联
方式1:
SELECT w.,a. FROM websites w INNER JOIN acceaa_log a ON w.id=a.site_id;
结果:(如图)
解析:
用INNER JOIN关键字 - 进行内连接(结果取字段对应公共部分)
w.,a. - 给表取别名方便操作
方式2:
SELECT w.,a. FROM websites w,acceaa_log a WHERE w.id=a.site_id;
解析:
这里的结果其实和方法1一模一样进行了内连接查询,只是写法不一样,看个人喜好选择
--左关联
SELECT w.,a. FROM websites w LEFT JOIN acceaa_log a ON w.id=a.site_id;
结果:(如图)
解析:
LEFT JOIN - 左关联查询(公共部分+左边)
他会先把左边的表全部打出来,取对应的上的,对应不上的会返回NULL
右关联同理,只是反过来了,就不做过多解释了
--右关联
SELECT w.,a. FROM websites w RIGHT JOIN acceaa_log a ON w.id=a.site_id;
结果:(如图)
解析:
LEFT RIGHT - 右关联查询(公共部分+右边)
--联合查询
SELECT aid FROM acceaa_log
UNION ALL
SELECT id FROM websites;
结果:(如图)
解析:简单来说就是把两张表合在一起查询,之前也有提过UNION这个字段,就是把而张表对应字段合在一起
去掉 ALL 就是起到一个去重的作用,只会打印对应不重复的字段,跟内连接很像
结果:(如图)
--全连接
SELECT w.,a. FROM websites w LEFT JOIN acceaa_log a ON w.id=a.site_id
UNION
SELECT w.,a. FROM websites w RIGHT JOIN acceaa_log a ON w.id=a.site_id;
结果:(如图)
解析:
这应该都可以看出来这是左连接和右连接拼接出来的一个结果,就不做过多阐述了(公共部分+左边+右边)
子查询
定义:
子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或者do
例:
--标量子查询(返回单一值的标量,最简单的形式)
SELECT * FROM websites WHERE id=(SELECT site_id FROM acceaa_log WHERE site_id=6);
如图:
其他(补充)
--排序
SELECT * FROM studentinfo ORDER BY age ASC;(升序)
SELECT * FROM studentinfo ORDER BY age DESC;(降序)
ORDER BY age - 把年龄进行排序
不写age后面的关键字,默认是升序从小到大来排
--删库
DROP DATABASE '库名'
--删表
DELETE FROM '表名'
--添加字段(表创建完后的情况下)
ALTER TABLE '添加字段的表名' ADD '添加的字段名称 '字段类型'
例:
ALTER TABLE studentinfo ADD address VARCHAR(50) NULL;
--添加主键
ALTER TABLE student ADD PRIMARY KEY(id);
--修改字段名称和属性
ALTER TABLE '添加字段的表名' change '原字段名' '新字段名' '字段属性';
例:
ALTER TABLE studentinfo change address addres VARCHAR(30) NULL;
--修改字段属性
ALTER TABLE '添加字段的表名' MODIFY '字段名' '字段类型约束';
例:
ALTER TABLE studentinfo MODIFY addres VARCHAR(60) NULL;
--字段说明
waihao VARCHAR(20) COMMENT "游戏外号" #comment做字段说明,备注
本文章暂时就结束了,还有涉及的一些知识,之后可能会出个后续,大学生第一次写文章,如文章中有不足或者写错的地方请指出见谅,有什么不懂的可以联系作者的!!!!
---------------------------------未经允许禁止转载-------------------------------------