数据库学习基本语法速成

查询所有数据库

show databases;

选择数据库                   使用数据库        删除数据库

select database();        use +数据库名;  drop +数据库名;

创建数据库

create database (if not exists) tb_user;

show tables;//查询表结构  

DESC 指定表名,查看表结构

show create table 表名;//查询建表语言

表结构创建语法  //USE +数据库名 指定在那个数据库中创建

 create table 表名 (

ID  INT  COMMENT  '编号',

name varchar(50) COMMENT '姓名';

age int comment '年龄';

gender varchar(1) comment ’性别‘) comment '用户表';

添加字段

alter  table 表名  add nickname varchar(20) comment  '昵称' ;

修改字段

alter table  表名 change 旧字段名  新字段名  修改类型 comment '注释';

alter table 表名 change nickname username varchar(30) comment '用户名';

删除字段

alter table 表名 drop username;//删除该行

修改表名

alter table 表名 rename to 新表名

删除表名

drop table +表名;  truncate table +表名;//删除表,并重建同名空表

添加数据

给字段添加数值

 insert  into 表名  (,  )   values  (  ); 或 insert into  表名 values();

插入多条数据

insert into 表名 values (,),(,); 

unsigned 无符号数大于等于0

修改数据

update 表名 set name ='1123'  where id=1;

修改多项数据

update 表名 set name='  ',gender='  男' where id=1;

修改所有项数据

update 表名 set  name='小李';

删除数据

delete from  表名   where gender= '女';

delete from 表名;删除所有数据

查询语句

select * from 表名;查询所有

SELECT workaddress as '工作地址' from emp;//as '工作地址'  为别名

SELECT workaddress   '工作地址' from emp; //可省略as

distinct//去除重复数据

SELECT distinct workaddress   '工作地址' from emp;

条件查询  该示例中 所用案例表名为 emp

select  * from emp where age=88;

select * from emp where age<=20;

查询不等于80

select * from emp where age<>20;

select * from emp where age!=20;

查询没有某值的人

select *from emp where idcard is null;

有某值的人

select *from emp where idcard is not null;

查询在15 到20岁之间的数据

select * from emp where age between 15 and20;

select * from emp where  age>=15 &&(and) age<=20;

查询女年龄小于20

select * from emp where and gender='gender' age<=20;

查询年龄在 18 20 40

select * from emp where age=20 or age=10 or age =40;

查询年龄为两个字的  _代替单个字符 %任意字符

select * from emp where name like '__';

查询最后一位是x的员工信息

select * from emp where idcard like '%x';

聚合函数

count 统计数量 max 求最大值 min 求最小值 avg 求平均值 sum 求和 作用于每一列//null值不参与聚合运算

select count (*//此处写所查询的属性) from emp;

select avg (age//此处写所查询的属性) from emp;

select SUM(age//此处写所查询的属性) from emp where wordaddress='西安';

分组查询

select 字段列表 from 表名 [where 条件] group by  分组字段名 [having]

按性别分组 并统计男性以及女性员工数量 select gender, count(*) from emp group by gender;

按性别分组 统计男性员工和女性员工的平均年龄

select gender,avg(age) from emp group by gender;

查询年龄小于45的员工,按工作地址进行分组,获取员工数量大于等于3的工作地址

select workaddress,count(*) age from emp where age<45  group by workaddress having count(*)>=3; 

where在分组之前进行过滤,having 在分组聚合之后进行过滤;

排序查询

order by  ASC升序 DESC降序

根据年龄进行升序排序 select  * from emp order by  age asc ;

根据入职时间进行降序排序 select * from emp order by time desc;

根据年龄对公司员工进行升序排序,年龄相同再根据入职时间进行降序排序

select  * from emp order by  age asc, time DESC;

分页查询

select 字段列表 from 表名 起始索引 查询记录数;

select * from emp limit 0,10; 查询第一页数据,展示10条数据

select * from emp limit 10,10;查询第二页的数据 第一个参数记录方法:(页码-1)*页展示记录数

小节联系

查询年龄为 20,21,22,23的女性员工的信息

select * from emp where gender='女' and age in(20,21,22,23);

查询性别为男,并且年龄在 20-40岁以内的姓名为三个字的员工

select * from emp where gender= '男' and  age between  20 and  40 and name like '_ _ _';

统计 员工表中,年龄小于60岁的,男性和女性员工的数量

select gender,count(*) from emp where age<60 group by gender;  //分组之前进行年龄过略

查询所有年龄小于等于35岁的员工的姓名和年龄,并对查询结果按升序进行排序,如果年龄相同按入职顺序进行降序排序

select name,age from emp where age<=35 order by age ASC  , time DESC;

查询性别为男,且年龄在20到四十岁以内的前五个员工的信息。对查询结果按年龄进行升序排序,年龄相同按入职时间进行升序排序;

select * from emp where gender='男' and age between 20 and 40 order by age asc,time asc

limit 0,5; 取前五条纪律语法最后写

编写与执行顺序

数据库学习基本语法速成_第1张图片

DCL

用户控制语言

查询用户

use mysql ;

select * from user;

创建用户

 create user '用户名'@'主机名' identified by '密码';

alter  user '用户名'@'主机名' identified with mysql_native_password BY ' 新密码'; 修改用户密码

删除用户 drop user '用户名'@'主机名';

创建用户

 create user 'itcast'@'localhost' identified by '123456';

在任意主机可访问该数据库

create user 'itcast'@'%' identified by '123456';

修改数据库名

alter  user 'heima'@'%' identified with mysql_native_password BY '1234';

删除用户名

删除用户 drop user 'itcast'@'localhost';

DCL权限控制 

查询权限 show grants for '用户名'@‘主机名';

show grants for 'heima'@'%';

授予权限 grant   select  on 数据库.表名 to '用户名'@'主机名';

grant all on itcast.* to 'heima'@'%';//授予该数据库所有表权限。

撤销权限  

revoke all on itcast.* from 'heima'@'%';  撤销权限

字符串函数

connat//拼接字符串  select connat('hello','mysql');

 lower将字符全部转换为小写 select lower('Hello');

upper将字符全部转换为大写 select upper('Hello');

字符串长度为5.且在01左侧填充 - 至长度为5 select lpad('01',5,'-');

字符串长度为5.且在01右侧填充 - 至长度为5 select rpad('01',5,'-');

trim 去除字符串头部与尾部的空格

select trim ('   Hello   MySQL  '); 作用结果 Hello  MySQL

select substring ('Hello  MySQL',1,5);

由于业务变更,企业员工的工号,统一为五位数,目前不足五位数的全部在前面补0,比如 1的工号应该为 00001;

update emp set worknumber = lpad (worknumber,5,'0');

数值函数

数据库学习基本语法速成_第2张图片

 select round (2.345,2);保留两位小鼠2.34

select lpad(rund()*1000000,6,'0') //生成六位 随机数

日期函数

数据库学习基本语法速成_第3张图片

 datediff(date1,date2);计算两个date之间的日期 默认为 date1-date2

select now();获取当前日期和时间

案例:查询所有员工入职天数,并根据入职天数到序排列

select name ,datediff(curdate(),time) days from emp order by days desc ;

流程控制函数

数据库学习基本语法速成_第4张图片

 ifnull(value1,value2); 如果value1不为空,返回value1,否则返回value2

if(value,t,f);如果 value 为真,返回true,否则返回false

case  workaddress (所选属性) when '北京' then '一线城市' when '上海' ten '一线城市'end

约束 

唯一约束 unique 主键约束 primary key ,自动增长约束 auto_increment 

非空约束  not null check (age>20&&age<=120)约束  default 默认约束

外键约束

外键让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

alter table emp add constraint  fk_emp_dept_id  foreign key (dept_id) references dept(id);

删除外键

alter table 表名 drop foreign key 外键名称;

删除和更新行为

no action  ,删除/更新行为时,首先检查该记录是否有对应外键,有则不允许删除或者更新

restrict  删除/更新行为时,首先检查该记录是否有对应外键,有则不允许删除或者更新

cascade 删除/更新行为时,首先检查该记录是否有对应外键,如果有则也删除外键在子表中的记录

set null 删除/更新行为时,首先检查该记录是否有对应外键,如果有,则设置子表中的该外键值为NULL

set default 父表有变更时,子表将外键设置为一个默认的值

alter table emp add constraint  fk_emp_dept_id  foreign key (dept_id) references dept(id) ON update cascade on delete cascade;

你可能感兴趣的:(数据库,学习,sql)