一、MySQL数据库的介绍和安装
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。
MySql是一种关系数据库管理系统。
MySql软件是一种开放源码软件,你可以修改源码来开发自己的 Mysql 系统。
MySql数据库服务器具有快速、可靠和易于使用的特点。
MySql使用标准的sql语言,并且支持多种操作系统,支持多种语言.
MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维 护,可以免费使用
MySQL的安装
命令行方式连接mysql 登录:
mysql [-hlocalhost -P3306](本机可省略)
-uroot -p(可以直 接写密码,不能有空格)
-h:主机名 -P:端口号 -u:用户名 -p:密码
退出:exit
MySQL的常用命令
查看当前所有的数据库:show databases;
选择指定的库:use 库名
查看当前的所有表:show tables;
查看其他库的所有表:show tables from 库名;
查看mysql版本 select version();
安装可视化客户端工具 SQLyog /
二、SQL语句
1、SQL介绍
结构化查询语言(Structured Query Language)简称SQL,是一种特殊 目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以 及查询、更新和管理关系数据库系统.
SQL优点: 不是某个特定数据库供应商专有的语是言,几乎所有DBMS都支持SQL 简单易学,灵活使用可以进行非常复杂和高级的数据库操作
sql语言中又分为3个不同分支
-- 1.ddl 数据(结构)定义
-- 2.dml数据操作 增删改
-- 3.dql 查询语句
2、DDL
(1)数据库
-- 创建数据库
CREATE DATABASE IF NOT EXISTS schooldb CHARSET uft8;
-- 删除数据库
drop database if exists schooldb;
-- 修改数据库字符集
ALTER DATABASE schooldb CHARSET utf8;
(2)表
--创建表的语法
--create table 表名 (数据名、类型、约束);
例:
-- 创建表
-- 确定表明 --学生信息表
-- 确定表中字段(列) 学号 姓名 性别 生日 电话 身高 注册时间
-- 确定字段(列)的数据类型 和 长度
-- 确定字段(列)的约束
CREATE TABLE student (
number INT,
NAME VARCHAR(6),
gender CHAR(1),
birthday DATE,
phone VARCHAR(11),
height DECIMAL(3,2),
reg_time DATETIME
);
--删除表(删除后表的数据就不存在了)
DROP TABLE IF EXISTS student;
--约束规则
-- PRIMARY KEY 设置主键约束 添加主键约束后,一个表中只能有一个列是主键
-- 主键列可以唯一的表示某一行数据
-- mySQL中主键可以设置为自动增长 AUTO-INCREMENT
-- NOT NULL 不能为空约束
-- UNIQUE 唯一性约束
-- 检查约束 设置条件
CREATE TABLE student(
number INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号主键',-- 设置主键 并且自动增长
NAME VARCHAR(6) NOT NULL COMMENT '姓名',-- 姓名不能为空
gender CHAR(1) NOT NULL COMMENT '性别',
birthday DATE NOT NULL COMMENT '生日' ,
phone VARCHAR(11) NOT NULL UNIQUE COMMENT '电话' ,-- 不能重复 不能为空
height DECIMAL(3,2) CHECK(height<2.50) COMMENT '身高',-- 设置条件
reg_time DATETIME COMMENT '注册时间`student`'
)
--修改表名
RENAME TABLE student TO stu;
--复制表结构
CREATE TABLE student LIKE stu;
3、DML(增删改)
--插入数据(四种方法)
--1、INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('张三','男','2024-2-3','15222222222',1.98,NOW())
--2、INSERT INTO 表名 set 列名1=值1,..列名n=值n
INSERT INTO student SET NAME='勒布朗詹姆斯',gender='男',birthday='1980-1-1',phone='15333333333',height=2.11,reg_time=NOW()
--3、批量插入 INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('张四','男','2024-2-3','15222222232',1.98,NOW()),
('张五','男','2024-2-3','15222232222',1.98,NOW()),
('张六','男','2024-2-3','15222223322',1.98,NOW())
--4、把一个表中的数据放到另一个表中 INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)
--修改数据
--UPDATE 表名 SET 列名 = ‘新值’WHERE
UPDATE student SET NAME ='库里' WHERE number=4
--删除数据 删除后自增数据不会变
--1、DELETE FROM 表名 WHERE 条件
DELETE FROM student WHERE NAME='张六'
--2、TRUNCATE TABLE 表名;清空整张
TRUNCATE TABLE stu
4、DQL查询语句
--基础查询语法
--select 查询列表 from 表名 where 条件
SELECT NAME FROM student WHERE number = 1
SELECT * FROM student WHERE number =2
--查询方法
--特定列查询:select column1,column2 from table
SELECT NAME,gender FROM student WHERE number = 1
--全部列查询: select * from table
SELECT * FROM student WHERE number =2
--算数运算符:+ - * /
SELECT NAME,height+1 FROM student
--排除重复行: select distinct column1,column2 from table 查询结果中所有的列都相同
SELECT DISTINCT NAME FROM student
--查询函数:select 函数; / 例如version()
SELECT LENGTH(NAME) FROM student
--函数
--单行函数:会对查询中每一行数据进行处理
--字符函数
--length(列名) 以字节为单位
SELECT LENGTH(NAME) FROM student
--char_length(列名) 以字符为单位
select name,char_lenfth,gender from student
--concat(str1,str2,str3..)连接多个字符串 as 别名
SELECT CONCAT(NAME,':',gender) AS '姓名性别' FROM student
--upper(列名) 小写转大写 lower(列名)转小写
SELECT UPPER(NAME),LOWER(NAME) FROM student WHERE number =5
UPDATE student SET NAME = UPPER(NAME) WHERE number = 5
--substring(列名,起始位置,截取的长度) sql中1是第一位
SELECT SUBSTRING(NAME,1,3) FROM student
--instr(列名,字符) 返回字符首次出现的位置 找不到返回0
SELECT INSTR(NAME,'斯') FROM student
--trim(列名) 取掉字符前后空格
SELECT TRIM(NAME) FROM student
--trim(子串 from 列名) 去掉字符串中指定的字串
SELECT TRIM('勒布朗' FROM NAME) FROM student
--lpad(列名,长度,字符) 左填充 在指定列的左侧填充指定长度的字符
SELECT LPAD(NAME,6,'勒布朗') FROM student
--rpad(列名,长度,字符) 右填充 在指定列的右侧填充指定长度的字符
SELECT RPAD(NAME,6,'勒布朗') FROM student
--replace(列名,被替换掉的,用于替换的) 替换指定字符
SELECT REPLACE(NAME,'O','o') FROM student
--逻辑处理 case when 条件 then 条件成立的结果 else 不成立的结果
--case when then end
SELECT
NAME,
gender,
(
CASE
WHEN height > 2
THEN '高个子'
WHEN height>=1.8
THEN '正常身高'
ELSE '不正常身高'
END
) AS height
FROM
student
--ifnull(列名,'为空时的默认信息')
SELECT NAME,gender,IFNULL(height,'未录入身高信息')AS'身高' FROM student
--if(条件,成立的结果,不成立的结果)
SELECT NAME,gender,IF(gender='男','帅哥','美女')FROM student
--数学函数
--round(数值) 四舍五入
SELECT ROUND(height) FROM student
--ceil(数值):向上取整,返回>=该参数的最小整数
SELECT CEIL(height) FROM student
--floor(数值):向下取整,返回<=该参数的最大整数
SELECT FLOOR(height) FROM student
--truncate(数值,保留小数的位数):截断,小数点后截断到几位
SELECT TRUNCATE(height,1),height FROM student
--mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负
--rand():获取随机数,返回0-1之间的小数
--日期函数
--now():返回当前系统日期+时间
--curdate():返回当前系统日期,不包含时间
--curtime():返回当前时间,不包含日期
--可以获取指定的部分,年、月、日、小时、分钟、秒
--YEAR(日期列)只保存年
SELECT YEAR(birthday) FROM student
--MONTH(日期列)只保存月
SELECT MONTH(birthday) FROM student;
--DAY(日期列) 只保存日
SELECT DAY(birthday) FROM student;
--HOUR(日期列) 只保存小时
--MINUTE(日期列) 只保存分钟
--SECOND(日期列) 只保存秒
--str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期
SELECT STR_TO_DATE('2003-11-28','%Y-%m-%d') FROM student
--date_format(日期列,格式):将日期转换成字符串
SELECT DATE_FORMAT(birthday,'%Y-%m')FROM student
--datediff(big,small):返回两个日期相差的天
SELECT DATEDIFF(CURTIME(),birthday) FROM student
--分组函数,也称聚合函数(多行变一行)
--功能:用作统计使用,又称为聚合函数或统计函数或组函数
--分类:
--sum 求和
SELECT SUM(height) FROM student
--avg 平均值
SELECT AVG(height) FROM student
--max 最大值
SELECT MAX(height) FROM student
--min 最小值
SELECT MIN(height) FROM student
--count 计数(非空)
SELECT COUNT(height) FROM student
--条件查询
--1、where 用法SELECT *FROM 表名 WHERE 条件
SELECT *FROM student WHERE number=1
--与或非为 and or not
SELECT *FROM student WHERE number>1 AND height > 2.00
--like是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值或数值型.
--通配符: % 任意多个字
SELECT *FROM student WHERE NAME LIKE '勒布朗%'
--between and 两者之间,包含临界值;
SELECT * FROM student WHERE height BETWEEN 1.80 AND 2.00
--in 判断某字段的值是否属于in列表中的某一项
SELECT * FROM student WHERE height IN(1.98,1.60)
SELECT * FROM student WHERE height NOT IN(1.98,1.60)
--IS NULL(为空的)或 IS NOT NULL(不为空的)
SELECT * FROM student WHERE height IS NULL
--查询合并
--1、UNION 的语法如下: 列数必须一致 会去除重复数据
--[SQL 语句 1]
--UNION
--[SQL 语句 2]
SELECT NAME,gender FROM student WHERE gender ='男'
UNION
SELECT NAME,gender FROM student WHERE gender ='女'
--2、UNION ALL 的语法如下: 单纯合并,不会将去除重复的
--[SQL 语句 1]
--UNION ALL
--[SQL 语句 2]
SELECT NAME,gender FROM student WHERE gender ='男'
UNION ALL
SELECT NAME,gender FROM student WHERE gender ='女'
--查询排序
--查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
--asc代表的是升序,desc代表的是降序,如果不写,默认是升序
--order by子句中可以支持单个字段、多个字段
SELECT * FROM student WHERE number>0 ORDER BY reg_time DESC--降序
SELECT * FROM student WHERE number>0 ORDER BY number ASC --升序
SELECT * FROM student WHERE number>0 ORDER BY height ASC,reg_time DESC
--控制查询数量
--limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
--SELECT * FROM table LIMIT 数据起始位置,每次查询数量
SELECT * FROM student WHERE number>0 LIMIT 0,4
--分组查询
--分组--在一些统计场景中,需要按照某一条件进行区分
--格式
select 分组函数,列(要求出现在group by的后面)
from 表
[where 筛选条件]
group by 分组的列表
[having 分组后的筛选]
[order by 子句]
--例子 --- 需要注意的是,having是对分组后的结果进行筛选,而非先筛选再分组
SELECT
gender,
MAX (height)
FROM
student
GROUP BY gender
HAVING MAX (height) != 1.52