一个做任务的网站怎么做物流网站
关系型数据库:不是把所有的数据全部存储在一起,而是分类存储在一起。
 常见的数据库
 关系型: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 root -p 或者 mysql -uroot -proot
 数据库的创建
 基础写法:create database +数据库名称;如:create database esl_factory;(分号必须要加)
 正常写法: character set +编码 collate +校对规则;
 显示创建的数据库列表: show databases; (分号必须要加)
 切换数据库:use+数据库名称;
 查询数据库的创建信息:show create database+数据库名称;
 查询当前正在使用的数据库: select database();
 删除数据库:drop database +数据库名称;
 修改数据库:alter database +数据库名称+character set ‘gbk’ collate +‘校对规则’;(数据库名称不能改,只能改编码和校对规则);
 二.表结构
 创建表:
 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中是true或false;
 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 into 表 values (值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-string,search-string,replace-string) original-string: 被搜索的字符串。可为任意长度 。search-string: 要搜索并被 replace-string 替换的字符串。replace-string: 该字符串用于替换 search-string
 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自增长,自增长只能使用int和bigint类型。开发中,主键基本上是必须要设置的。
 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);
