本文介绍: 如:insert into user_info (username,job,entry_date,age) values (‘chenxiaoyun’,‘teacher’,‘2019-10-11’,20);where 子句可以使用运算符有: > = <= = (不等于) in(代表范围),like,between,select prod_name from where price in(1002,1003)查询价格是1002或者1003的商品名称

关系数据库:不是把所有的数据全部存储在一起,而是分类存储在一起。
常见数据库
关系型:oracle大型收费,mysql小型免费
sql语言操作数据库
structured query language 结构化查询语言
1.DDL 数据定义语言
创建数据库 创建创建视图 修改数据库 删除数据库 修改删除
create—-创建 alter修改 drop删除
2.DML数据操作语言
操作数据 插入数据(insert修改数据update 删除数据delete
3.DCL数据控制语言(很少用,一般在代码中写
if-else while
4.DQL 数据查询语言
表中查询数据select
一.sql语法
1.1 SQL语句总是以关键字开始,如SELECT、INSERT、UPDATE、DELETE、DROP、CREATE。
1.2 SQL语句以分号结尾。
1.3 SQL不区分大小写,意味着update与UPDATE相同。
SELECT – 从数据库中提取数
UPDATE – 更新数据库中的数据
DELETE – 从数据库删除数据
INSERT INTO – 向数据库插入新数据
CREATE DATABASE – 创建数据库
ALTER DATABASE – 修改数据库
CREATE TABLE – 创建新表
ALTER TABLE – 变更(改变)数据库
DROP TABLE – 删除
CREATE INDEX – 创建索引搜索键)
DROP INDEX – 删除索引
一.数据库
开启mysql服务cmd: 以管理员身份运行):net start mysql
连接数据库mysql -u rootp 或者 mysql -urootproot
数据库的创建
基础写法create database +数据库名称;如:create database esl_factory;(分号必须要加)
正常写法: character set +编码 collate +校对规则
显示创建的数据库列表show databases; (分号必须要加)
切换数据库:use+数据库名称
查询数据库的创建信息show create database+数据库名称
查询当前正在使用的数据库: select database();
删除数据库:drop database +数据库名称
修改数据库:alter database +数据库名称+character setgbkcollate +‘校对规则’;(数据库名称不能改,只能改编码和校对规则);
二.表结构
创建表:
create table +表名称(
字段1 类型长度约束
字段2 类型长度约束
);
注意:1.字段之间使用逗号最后一个字段不能使用逗号
2.如果是字符串数据的类型长度必须是指定的。
3.int类型默认长度是11。
创建一张结构
create table employee(
id int,
name varchar(30),
birthday date,
entry_date date,
job varchar(50),
salary double,
resume text
);
一.数据库的数据类型
1.字符串型(常用)
varchar长度可变的,可节省空间
char 长度是不可变的。长度不够时使用空格补全
2.大数据类型(不常用)
BLOB (字节) TEXT (字符文本
3.数例型(常用):
INT BIGINT FLOAT DOUBLE
3.逻辑型(不常用)
BIT(1或0),在JAVA中是truefalse;
4.日期型(常用)
DATE — 只包含日期(年月日)
TIME — 只包含时间时分秒
DATETIME —包含日期和时间 ,传入空值时,显示
TIMESTAMP —包含日期和时间,传入空值时,默认当前系统时间
二.表约束
约束的好处:保证数据的完整性。
主键约束代表记录唯一标识
主键约束primary key 通过关键字声明某一列为主键
PRIMARY KEY 约束唯一标识数据库表中的每条记录
 主键必须包含唯一的值。
 主键列不能包含 NULL 值。
 每个表都应该有一个主键,并且每个表只能有一个主键
引用(和外键一起来使用
唯一约束unique) 值就不能相同
每个可以多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
非空约束(not null) 值也不能为空
索引约束:快速创建检索数据
default约束:默认值
DEFAULT 约束用于列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录
外键约束:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
check约束:
三.操作
删除表:drop table +表名
查看标签
show tables —–查看当前数据库中所有的字段
desc + 表名 —–查询表的信息
sow create table +表名 —–查看表的创建的信息
四.操作结构
1.添加一个新字段
alter table +表名称 +add +字段名称 +数据类型长度) 约束;
2.修改字段的数据类型,长度或者约束
alter table 表名称 modify 字段名称 数据类型(长度) 约束;
3.删除某一个字段
alter table 表名称 drop 字段名称;
4.修改字段的名称
alter table 表名称 change 旧字段 新字段 数据类型(长度) 约束;
5.修改表的名称
rename table 旧表名 to 新表名;
五.向表中添加数据
1.添加数据,使用insert关键字来添加数据
insert into 表 (字段1,字段2,字段3) values (值1,值2,值3)
或者 insert intovalues (值1,值2,值3)
注意事项插入的数据与字段数据的类型相同;数据的大小 应该在规定的范围内,数据中的列的位置和字段位置是相同的;字符串和日期类型的数据,必须要使用单引号括起来。
如:insert into user_info (username,job,entry_date,age) values (‘chenxiaoyun’,‘teacher’,‘2019-10-11’,20);
六.解决中文乱码问题
插入中文,会产生乱码问题
修改MYSQL客户端编码即可
1.停止MYSQL服务器
2.找到MYSQL安装路径,找到my.ini配置文件
3.修改客户端编码,改成GBK;
[client]
port=3306
[mysql]
default-character-set=gbk
4.重启MYSQL服务
七.修改数据的sql语句
update 表名称 set 字段1=值1,字段2=值2 where 条件
如果没有where,默认选择所有记录,如果有where,修改符合条件记录
1.所有员工薪水修改为5000元: update user set salary=5000;
2.将姓名为‘熊大’的员工修改为2000:update user set salary=2000 whre username=‘熊大’;
3.将姓名为‘熊二’的员工薪水改为4000,job改为‘保洁’:update user set salary=4000,job=‘保洁’ where username=‘熊二’;
4.将小明的薪水在原来基础上加300:update user set salary=salary+300 where username=‘小明’;
八.删除数据的sql语句
1.删除语句delete from 表 where 条件
例:delete from user where username=“Allen”;
2.删除所有的数据
2.1 delete from 表;
一行一行的数据;支持事务操作
start transaction;
delete from user where username=“Allen”;
rollback;
(Allen被删除后,回滚恢复)
2.2.truncate 表: 先把整个表删除,再创建一个与原来一样的空数据的表。
truncate user;
九.查询语句(重点)
1.select * from 表;(检索所有列)
2.select 字段1,字段2 from 表;(检索多列逗号隔开)
select 字段1 from 表(检索单列)
3.distinct 去掉重复关键字 select distinct name from user;
4.limit限制返回的数量
SELECT prod_name from products limit 5;
limit 3,4代表从第3行开始的4行,limit5代表从第0行开始的5行,0省略
5.可以查询的列进行运算
查询语句可以使用as作关键字起别名alias),as常被省略;列名和表名均可起别名
练习
select * from stu;
select username,role from user;
select distinct english from user;
select username,math+10,english+10,chinese+10 from stu;
select username,(math+english+chinese) as t from stu;
select * from stu where username=“chenchen”;
select username,english from stu where english > 90;
select uername,(math+english+chinese) from stu where (math+english+chinese) > 150;
十.查询语句(where子句)
select 字段1,字段2 | * from 表 where 条件过滤; WHERE 子句用于过滤记录
WHERE 子句用于提取满足指定标准的记录。
where 子句可以使用运算符有: > < >= <= = <> (不等于) in(代表范围),like,between,
like运算符—–模糊查询
like一起使用的通配符(%表示一个或多个字符表单个字符
select * from stu where username like ‘张
’; (_占位符,代表一个位置结果可以是张飞,但不不能是张翼德);
select * from stu where username like ‘张%’;(%占位符,可以代表多个位置结果是张开始的,张飞,张三四);
select * from stu where username like ‘%张’;(以张结尾的,李张);
select * from stu where username like ‘%张%’;(username中有带张字的);
and —-与
or —–或
not —-非
between …… and 在……之间(值可以是数字文本或日期)
SELECT * FROM Orders WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
IN指定条件范围 (功能与or相同)
select prod_name from where price in(1002,1003)查询价格是1002或者1003的商品名称。
select prod_name from products where id not in (1002,1003);
SQL 中,NULL 用于表示缺失的值。数据表中的 NULL 值表示该值所处的字段为空。使用IS NULL来查找空值
SELECT column_names FROM table_name WHERE column_name IS NULL;
SELECT column_names FROM table_name WHERE column_name IS NOT NULL;
练习
select username,english from stu where english >= 60 and english <=90;
相当于select username,english from stu where english between 60 and 90;
select username,english from stu where english in (60,70,80);
MySQL 的 WHERE 子句字符比较是不区分大小写的。
你可以使用 BINARY 关键字来设定 WHERE 子句字符比较是区分大小写的。
SELECT * from runoob_tbl WHERE BINARY runoob_author=‘RUNOOB.COM’;
select prod_name from products where prod_price IS MULL
十一.查询语句(order by结果进行排序)
order by 字段 asc | desc; (asc 代表升序,desc代表降序); order by 放在select 语句末尾
select username,math from stu order by math desc;(对数学成绩排序输出);
select username,(math+english+chinese) as t from stu order by t desc;
select * from stu order by english desc,math desc; (按照英语降序排,英语相同的按照数学降序排);
select * from stu where username like ‘陈%’;
十二.聚集函数(Aggregate function基于一组数据进行计算返回一个输出结果
聚集函数:excel表格:求数量,求和,平均值最大值最小值
聚焦函数操作的都是某一列的数据。
1.求数量:count()
select count(*) from stu where (math+english+chinese) > 220;(统计总分大于220的人数有多少?)
select count(distinct sno) from sc; //从sc中求数量,去重sno相同的内容
2.求某一列数据的和:sum(),sum只对数值类型起作用
select sum(math),sum(chinese),sum(english) from stu;
select sum(math+chinese+english) from stu;
3.求平均avg()
select avg(chinese) from stu;
4.max()—最大值
5.min()—最小值
十三.标量函数(Scalar function针对每个输入参数返回一个输出结果
1.UPPER()或者UCASE()—-转换成大写字母
2.LOWER()或者LCASE()—转换成小写字母
select upper(sno) from student;
select upper(sno) from student;
3.MID(column_name,start,length); //column_name和start必填start不从0开始,从1开始,length可选。
MID() 函数用于从文本字段中提取字符。
select mid(sname,1,2) from student;
4.LENGTH() 函数回文本字段中值的长度。
5.ROUND() 函数用于把数值字段舍入为指定小数位数
SELECT ROUND(column_name,decimals) FROM table_name; //column_name必填decimals必填(小数位)
6.SELECT NOW() FROM table_name; //NOW() 函数返回当前系统的日期和时间
7.FORMAT() 函数用于对字段的显示进行格式化
SELECT FORMAT(column_name,format) FROM table_name; //column_name必填format必填,格式
SELECT FORMAT(100.3111,0);//取整,得出:100
8.DATA_FORMAT() //日期格式化
select DATE_FORMAT(NOW(),‘%Y-%m-%d’) from sc; //date_format用于日期格式化
9.SQRT() // 函数用于计算得出任何数值平方根
10.RAND 函数,用于产生 0 至 1 之间的随机数
11.CONCAT 函数用于将两个字符串连接为一个字符串;
select concat(column1,column2,column3) from student;
12.REPLACE()字符串替换函数
replace(original-stringsearchstring,replacestring) original-string: 被搜索的字符串。可为任意长度 。searchstring: 要搜索并被 replacestring 替换的字符串。replacestring: 该字符串用于替换 searchstring
select replace(title,‘陈小芸’,‘金瑜辉’);
13.TRIM()函数去除字符串头尾空格,ltrim去掉左边空格rtrim去掉右边空格
select trim(tname) from student;
十四.查询语句(分组查询group by)使用关键字group by ** 根据字段进行分组
select * from orders group by product; 按照商品归类查询
select product,sum(price) from orders group by product having sum(price) > 100; 查询总共有几类商品,并且每类商品总价大于100的商品
select product,sum(price) from orders where price > 40 group by product having sum(price) > 100; 查询购买了几类商品,并且商品的价格大于40,每类总价大于100的商品
注意:使用where的条件,如果有分组,where的条件是分组之前的条件;
新的关键字,having关键字(子句)进行分组的条件过滤
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与 Aggregate 函数一起使用。
HAVING子句已添加到SQL中,因为WHERE关键字不能用于聚合函数。
//where后面不能使用聚合函数,having可以使用聚合函数。
十四.单表约束
1.主键约束(非空,唯一,作为一条记录的标识引用),声明主键用primary key,主键可以用auto_increment自增长,自增长只能使用intbigint类型。开发中,主键基本上是必须要设置的。
2.唯一约束,使用关键字unique;
3.非空约束not null;
create table person(
id int primary key auto_increment,
username varchar(30) unique,
email varchar(30) not null
);
外键约束
目的是保证表结构中的数据完整性。
create table emp(
id int primary key auto_increment,
name varchar(30),
salary double,
dno int,
foreign key(dno) references esl_factory(id);
);
十五.一对多表结构设计
结构设计常用方式一对一,一对多,多对多;
一对一(很少用),两张表主键一致;
一对多(最常用)
两张表,主表(一方),从表(多方)
比如部门表和员工表中,一个部门下有多个员工,每个员工只属于一个部门。那么部门是一方,员工是多方。
建表原则:在多方表中添加字段,把该字段作为外键指向一方表的主键。
多对多(较常用)
场景用户角色,一个用户多个角色,一个角色多个用户所拥有。
建表原则:多对多拆分成2个一对场景,创建一张中间表,存储数据关系

十六.多表查询之内链接
笛卡尔积
连接
1.普通内链接:……inner join ……on 条件
select * from dept inner join emp on did=dno;
2.隐式内链接
语法:select …… from 表1,表2 where 表1.字段1=表2.字段2;
语句:select * from dept,emp where dept.did=emp.dno;
别名:select * from dept d,emp e where d.did=e.dno;
指定字段:select d.dname,e.ename,e.sal from dept d,emp e where did=e.dno;
十七.多表查询之外链接
左外链接:使用关键字select * from 表1 left outer join 表2 on 条件;
outer关键字可以省略不写;
select * from dept left outer join emp on dept.did=emp.dno;
右外链接:select * from 表1 right outer join 表2 on 条件;
select * from dept right outer join emp on dept.did=emp.dno;
连接查询的是2张表交集数据,主外键关联的数据。
左外连接查询的是左表中所有的数据和2张表主外键关联的数据。
右外连接查询的是右表中所有的数据和2张表主外键关联的数据。
十八.子查询:把查询语句的结果作为另一条查询语句的条件。
select username,english from stu where english > (select avg(english) from stu);

原文地址:https://blog.csdn.net/qq_39460057/article/details/134732776

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25978.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注