MYSQLSQL语句

    xiaoxiao2021-12-14  20

    1.数据库: * 存储数据的仓库。 2.数据库的分类: * 单机数据库 * 网络数据库 * mysql ,sqlserver , oracle , sybase , db2  3.数据模型: * 层次模型 * 网状模型 * 关系模型 4.数据库的组成: * 数据,表,表之间的关系。 * 表结构: * 行 * 单元(列) * 数据 5.数据与信息: 6.数据约束: * 主键约束:记录都有一个主键来唯一标识该记录。 * 记录可以没有主键,但建议设置主键。 * 外键约束:用来关联两个表中记录的字段。 * 物理外键 * 逻辑外键 * 组合键(联合主键):记录由多个字段联合在一起,唯一标识该记录。 * 唯一约束:唯一标识该记录。 7.E-R图: * 在数据库建模中,经常使用E-R图 * 矩形表示实体 * 椭圆表示属性 * 椭圆+下划线表示主键 * 实体之间的关系: * 1 :1 一对一关系 * 1 :n 一对多的关系 * n : 1 * n : n 多对多关系 8.范式: * 数据库设计的规则 * 1FN 在一列中不能出现2个数据。 * 2FN 一条记录中的所有字段要求完全依赖于主键。 1001 ,dmc , 18 , china 1002 , dmc2 , 18 , china * 将冗余的记录重新形成一张表进行存储,通过外键进行关联。 1 china 2 usa -------------------------------- 1001 ,dmc , 18 , 1 1002 , dmc2 ,18 , 1 * 3FN 一条记录中的所有字段不能存在传递依赖。 1001 , dmc , 18 , china , 亚洲 1002 , dmc2 , 18  , china , 亚洲 * 将传递依赖部分形成一张表进行存储,通过外键进行关联 1 , china , 亚洲 2 , usa,美洲 ---------------------------------------- 1001 ,dmc , 18 , 1 1002 , dmc2 ,18 , 1 9.安装mysql数据库: * mysql5.0 * 卸载mysql : 控制面板卸载程序。 删除安装目录。 * 安装mysql: * 选择编码字符集。 * mysql安装成功后会自动分配一个root用户。只需要为其设置密码。  10.mysql简单命令: * RDBMS 关系型数据库管理系统 * 在cmd中连接mysql mysql -uroot -p  * show databases ; 显示所有的数据库 * use database_name ;选择一个数据库 * use mysql ; * create database databsse_name ;创建一个数据库 * create database dmc ; * drop database databaes_name ;删除数据库 * drop database dmc ; 11.数据库sql语句之DDL * sql : 结构查询语句 * DDL : 数据定义语言 定义数据存储结构(数据库,表等。。) * create * create table table_name(cname1 type , cname2 type) ; * create table emp( eno varchar(32), ename varchar(32), sal int, dept varchar(32)  ) ; * sql中的常用数据类型: * int 最大长度为11 * varchar 可变字符串 最大长度为2000 * char    不可变字符串  最大长度为2000 * date  表现形式(yyyy-MM-dd) * desc table_name  ;显示表格的结构 * show tables ;显示所有的表格 * 创建表时为字段增加约束。 create table emp( eno varchar(32) primary key,    --设置主键 dept varchar(32) not null,    --不能为空 ename varchar(32) unique    --唯一  ) ;  create table emp( eno varchar(32) ,     dept varchar(32) ,     ename varchar(32) , primary key(eno,ename) -- 设置主键(组合键)  ) ; * drop * dorp table table_name ; 删除表 * drop table emp ; * alter * 修改表的结构 * alter table table_name add cname type ;  添加一个字段。 * alter table emp add birthday date ; * alter table table_name drop cname ; 删除一个字段。 * alter table emp drop sal ; * alter table table_name change cname1 cname2 type ; * alter table emp change dept deptno varchar(32) ; * alter table table_name modify cname type ; * alter table emp modify deptno int ; 12.数据库sql语句之DML * DML 数据操作语言:添加,删除,修改,查询数据。 * insert 添加数据: * insert into table_name[(c1,c2,...,cn)] values(v1,v2,....,vn) ;     -- []表示可有可无 * insert into emp values('1001','dmc',10000,'2016-01-01'); * emp后没有指定具体的表字段,插入时默认所有字段都插入,且插入顺序即为建表时字段顺序。 * 数据库中字符串(varchar|char)只能使用单引号。 * 如果是数字格式,则可以使用单引号包含,也可以不使用单引号包含。如果将内容付给字符类型,则自动转换。 * 日期类型是date。应用时,可以将符合日期格式的字符串赋值给日期字段。 * 使用select * from emp ;查看表中的记录。 * insert into emp(ename , eno) values('dmc','1002') ; * 没指定的字段,默认值都是null * 主键,物理外键,not null的字段必须赋值。 * 即使为所有的字段都赋值,也建议指定字段,提高效率。 * update 修改数据: * update table_name set c1=v1 , c2=v2,...,cn=vn [where ?]  * update emp set sal = 12000 ;   所有记录的sal都改成12000; * update emp set sal = 12000 where birthday < '2015-01-01' ; 将2015-01-01以前出生的员工,工资改成12000 * update emp set sal = sal + 2000 ;  所有员工工资涨2000 ; * 修改时,不要(不允许)修改主键。 * delete 删除数据: * delete from table_name [where = ?] ; * delete from emp  ;  删除表中的所有记录 * 无论删除多少记录,一定是整条删除。不能删除某一个字段的值。 * delete from emp where sal > 10000 ; 删除sal>10000的所有记录。 ** truncate emp ;  清空表。 * 从结果来看,与delete from emp ; * select 查询数据: * DQL  * select * | c1,c2,...,cn from table_name [where ?] [group by ? [having ?] ] [order by ?] [limit ?] * select * from emp ;查询所有记录,并显示所有字段。 * select eno,ename from emp ;查询所有记录,并显示eno和ename字段。 * 即使查询显示所有字段,也推荐指定字段,可以提高查询效率。 * 使用as 为字段设置别名。 as可以省略 * select ename as '姓名' from emp ;  * select ename '姓名' from emp ;  * 过滤条件: * 使用where关键字为sql语句增加过滤条件。 * 比较运算符: = > < >= <= !=(<>)    注意:= 表示相等比较。 * select * from emp where eno != 1001 ; * is null 或 is not null 过滤值为null的字段。 * select * from emp sal is null ; ** null和任何值进行比较都不成立。 ** null和任何值进行运算值都为null。 * 逻辑运算:and or * select * from emp where sal > 12000 and birthday > '2016-01-02'; ** 当and和or都存在时,优先and比较。 * 范围 * between v1 and v2 ;  在v1和v2之间。   v1=< ? <=v2 * select * from emp where sal between 22000 and 25000 ; * in 在某一个范围中。 * select * from emp where ename in ('dmc1','dmc2','dmc4','world','china'); * any , all * 与子查询联用。 * 模糊查询: * 使用like进行模糊查询。 * 使用_代替过滤值中的一个元素。 * 使用%代替过滤值中的n个元素(n>=0) * select * from emp where ename like 'dmc_' ; * select * from emp where ename like '%d%' ; * order by 排序: * 将查询结果进行排序。  升序(asc),降序(desc) * select * from table_name order by c1 asc|desc , c2 asc|desc ... ; * 按照c1字段进行排序,排序之后如果有记录依然无序按照c2进行排序,一次类推。 * 如果没有指定排序字段或排序最后依然有无序记录,则按照主键排序。 * 排序时,如果不写asc或desc,则默认是升序(asc) * select * from emp order by sal desc ; * select * from emp order by sal desc , birthday desc; * select * from emp where sal > 23000 order by sal desc ; * group by 分组: * 分组函数:count , max , min , avg , sum * select count(*) from emp  ; 获取记录数。 * select count(eno) from emp ; 获得eno不为null的记录数。 * select max(sal) from emp ; 获得sal最大的值。 * select min(sal) from emp ; * select avg(sal) from emp ; 获得sal平均值。 * select sum(sal) from emp ; 获得sal的和。 * select count(sal) , max(sal) , min(sal) , avg(sal) from emp ; * 分组函数不能与普通字段一同显示。 * select ename , max(sal) from emp ;  错 * 如果分组函数与普通字段一同显示了,那么该字段一定是分组字段。 * select [分组字段] , 分组函数 from table_name group by c1,c2,...,cn * 按照c1,c2...进行分组。将指定分组字段值相等的记录划分为一组。 * 分组字段是c1,c2...中的全部或部分。 ** 如果分组字段不是c1,c2中的一个,mysql不会报错,默认显示该组第一个记录的字段值。其他数据库报错。不建议使用。 * select ename , job , count(*) from emp group by job;  *  select job , count(*) , avg(sal) , max(sal) from emp group by job;  * 分组过滤: * 在group by的后面使用having 进行过滤。 * having过滤时可以使用分组函数。where过滤时不允许使用分组函数。 * where 过滤在having过滤器之前。 * select job , avg(sal) from emp group by job having avg(sal) > 10000 ; * limit 分页: * select * from table_name limit startIndex,length ; * 在所有的查询结果中,从指定索引位置开始,将length个记录显示(返回) * 记录索引从0开始。 * select * from emp limit 0,2 ; 取出前2条记录 * 查询工资最高的2个人。 * select * from emp order by sal desc limit 0,2 ; * 查询平均工资最高的2个行业 * select job,avg(sal) from emp group by job order by avg(sal) desc limit 0,2 ;
    转载请注明原文地址: https://ju.6miu.com/read-967997.html

    最新回复(0)