MYSQL SQL语句

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 ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值