sql语句练习

sql基本用法

‘- 显示数据库:show databases;
数据库:
	sql server(微软)windows 专有数据
	mysql    默认端口:3306
	oracle(重点)甲骨文
	access
	sqlite
	ibm db2
	关系型数据库管理系统

-查看 mysql 版本: select version();
primary key 主键   auto_increment 自动递增   not null ,要求该约束所修饰的字段,不能为null或空    unsigned 约束的字段,会去掉负值,添加到正值,范围 x 2 + 1
排序
命令格式:select * from 表名 order by 字段名 asc(升序)|desc(降序);
多字段排序
select * from department order by groups desc,kpi desc;
多字段排序时,先按第一字段排序,第一段相同的,再按第二字段排序。


创建
- 创建数据库命令格式: `create database 数据库名字 charset=字符集`
- 创建表命令格式: `create table 表名( 字段 属性 );`

删除
- 删除表
 命令格式:drop table 表名;
- 删库
格式: `drop database 库名;`
删除主键
alter table 表名 drop 主键字段名;
删除数据
命令格式
delete from 表名 where 【条件】

修改
-修改已创建的表名
命令格式:alter table 原表名 rename to  新表名;

  
旧改法:
  	alter user ‘root‘@‘localhost‘ identified by ‘mysql‘;

-10.1.38-MariaDB 修改密码:
	update mysql.user set Password = password(‘1999‘) where 			user=‘(root)‘;
	flush privileges;
	exit;

远程链接:
	GRANT ALL PRIVILEGES ON * .* TO ‘root‘@‘%‘ IDENTIFIED BY ‘root‘ WITH GRANT OPTION;

mysql 配置文件:
	 windows -> mysql/bin/my.ini
	 linux -> mysq/my.cnf


修改创建好的表字
段命令格式: alter table 表名 change 原字段名 新字段名 字段类型 字段属性(约束);
添加新的字段
命令格式: alter table 表名 add 字段名 字段类型 字段属性(约束);
修改表名
命令格式:alter table 旧表名 rename to 新表名;
创建表后修改主键
alter table 表名 change 原字段名(要设为主键的字段) 新字段名 int primary key auto_incremnt not null;
修改数据
update 表名 set 字段名1=要修改值1,字段名2=要修改值2 where [条件]


查找
基本查询
命令格式:select [要查询的字段,如果是所有字段,就是*;如果单个,写字段名] from 【表名】 where 【条件】
范围查询
命令格式: select [字段] from 表名 where 字段名 between 开始 and 结束
in ( ) 在 ... 里 not in
模糊查询
命令格式: select [字段] from 表名 where 字段 like ...%...
内联接查询
命令格式:select [字段] from 表名1 inner join 表名2 on 表名1.连接字段=表名2.连接字段
右链接
select * from student s right join class c on s.cls_id=c.id
左连接
select *  from class c left join student s on s.cls_id=c.id;
全联接
 select * from class c left join student s on c.id=s.cls_id
 union
 select * from class c right join student s on c.id=s.cls_id;
自联接(自查询)
表和自身的连接,使用 inner join 来完成

插入数据
命令格式:
insert into 表名(字段名1,字段名2,字段名3.....)values(值1,值2,值3...);
另外一种形式
insert into 表名 values(字段1的值,字段2的值,字段3的值。。。。);

-分组
group by 分组
分组  group_concat()+group by 

 -聚合函数
统计函数 count()
命令格式: select count(要统计的字段) from 表名 where [条件]
求最大值
命令格式:select max(求最大值的字段) from 表名;
求最小值
命令格式:select min(要计算最小值的字段) from 表名;
求和
命令格式:
select sum(要求和/总数的字段) from 表名;
求平均值
select avg(要求平均值字段) from 表名;

having
having 和 where 都 可以对记录进行筛选;但是having跟在group by 后面,group by 跟在 where 后面;having 后面条件必须在 select 字段中出现,没有,就会报错;where 是必须是表中字段
where ... group by ... having

视图
命令格式:
create view 视图名字 as select语句;
查看视图
命令格式:show tables;
删除视图
drop view 视图名字
修改视图
create or replace view 视图名字 as select语句;

索引
查看索引
命令格式:
show index from 表名;
创建索引的命令
格式:
create index idx_索引名  on 表名(字段名(索引长度))
删除索引
命令格式:
drop index 索引名称 on 表名;



三范式:
1:确保每列保持原子性
2:确保表中每列都和主键直接相关
3:确保每列都和主键列直接相关,而不是间接相关



事务:
	是一个操作序列,这些操作要么都执行,要么都不执行,它是一个完整的,不可分割的工作单位。
事务具有的特性:原子性 ,一致,隔离,持久
开启事务:start transaction   / begin
提交         commit


当前时间加1天
select date_add(now(),interyal 1day)


例一:

1.创建数据库
create database books charset utf8;
2.创建表
‘‘‘
int 整形
primary key 主键
auto_increment 自增
float 浮点型
 name 书籍名称  price 价格 author 作者 publish 出版社
‘‘‘

create table book(
    id int primary key auto_increment,
    name varchar(20),
    price float(5,2),
    author varchar(20),
    publish varchar(20)
     );
3.添加数据
	3.1添加一条
    INSERT into book VALUES(1,‘北平无故事‘,‘25‘,‘刘和平‘,‘作家出版社‘);
    3.2添加多条
    INSERT into book VALUES
    (2,‘人间失格‘,‘16‘,‘太宰治著‘,‘作家出版社‘),
    (3,‘高兴‘,‘16‘,‘贾平凹‘,‘人民出版社‘),
    (4,‘源氏物语‘,‘57‘,‘刘和平‘,‘人民出版社‘),
	(5,‘卡夫卡文集‘,‘9‘,‘卡夫卡‘,‘邮电出版社‘),
	(6,‘大家‘,‘12‘,‘王蒙‘,‘邮电出版社‘),
    (7,‘拉片子‘,‘37‘,‘杨健‘,‘清华出版社‘),
    (8,‘古代散文‘,‘5‘,‘归有光‘,‘安徽出版社‘),
	(9,‘百花散文‘,‘6‘,‘孙虹选‘,‘百花文艺出版社‘),
    (10,‘方令孺散文集‘,‘5‘,‘方令孺‘,‘安徽文艺‘);
    
4.查询所有图书的信息,并按价格降序显示
‘‘‘order by 排序
desc 倒序
asc 正序
‘‘‘
select * from book order by price desc;
select name,price from book order by price (查看指定字段)
5. 删除ID是2的记录,如果没有相关记录则提示
‘‘‘
删除 delete from 表名 where 条件语句
‘‘‘
delete from book where id=2;
6.查询出所有刘和平的图书信息 ,并输出。
select * from book where author=‘刘和平‘;
7. 将所有价格不足10元的图书调到10元,并查看信息
‘‘‘
更新 uodate 表名 set 要修改的内容 where 被修改的内容;
‘‘‘
 update book set price=10 where price<=10;
8. 查看所有图书的价格情况,并升序显示
select * from book order by price asc;
9. 查看所有价格低于20元的图收信息
select * from book where price <=20;
10.所有图书的价格上调20%,并查看信息
‘‘‘
可以直接修改
‘‘‘
update book set price=price*20;

例二

1.创表
CREATE TABLE staff(

	id int PRIMARY KEY auto_increment,
 	 sid int,
    sname VARCHAR(20),
	sex ENUM(‘男‘,‘女‘),
	job VARCHAR(20),
	birthday datetime,
	salary int,
	comm int,
	withhold int	
);
2.插入数据
INSERT into staff VALUES(1,1001,‘张三‘,‘男‘,‘高级程师‘,1975-1-1,2200,1100,200),(2,1002,‘李四‘,‘女‘,‘助工‘,1985-1-1,1200,200,100),
(3,1003,‘王五‘,‘男‘,‘工程师‘,1978-11-11,1900,700,200),(4,1004,‘赵六‘,‘男‘,‘工程师‘,1979-1-1,1960,700,150);

3.修改表名为emp
‘‘‘修改表名
命令格式:alter table 旧表名 rename to 新表名;
‘‘‘
alter table staff rename to emp;
4.向表中添加字段hobby,设置类型为varchar(50),设置唯一约束
alter table emp add hobby varchar(50) unique;
5.向表中添加一条记录
insert into emp values(5,1005,‘黑子‘,‘兽‘,‘助理‘,1953-6-7,1235,523,130,‘吃‘);
update emp set sex=‘男‘ where id=5;
6. 修改sname字段的类型为varchar(20)
‘修改一个字段的类型‘
alter table 表名 change ‘字段‘ ‘修改字段‘ varchar() default null;
ALTER TABLE emp CHANGE `sname` `sname` varchar(50) DEFAULT NULL; 
7.查询表中sid字段的值从是1002或1003或1005员工的所有记录
 select * from emp where sid in(1002,1003,1005);
8. 修改表中job值是高级工程师员工的job为“架构师”
 update emp set job=‘架构师‘ where job=‘高级程师‘;
9.删除表中sid是1003并且job是王五的员工的记录
delete from emp where sid=1003 and sname=‘王五‘;
10.修改表中姓名是1004员工的salary在原来的基础上-300
‘update 员工表 set 部门id=01 where 员工id=000‘
update emp set salary=(salary-300) where id=4;

例三

-- 1.创建test数据库
CREATE DATABASE c1 CHARACTER set utf8
use test
-- 2.在test数据库中创建emp表,表结构如下图所示(id设置为主键自增长)
CREATE table emp(
	empno int(11) PRIMARY key auto_increment not null,
	ename VARCHAR(50),
	job VARCHAR(50),
	mgr int DEFAULT null,
	hiredate date,
	sal DECIMAL(7,2),
	comm DECIMAL(7,2) DEFAULT null,
	deptno int(11)
);

-- 3.向emp表中添加记录如下图所示
insert into emp VALUES(1001,"甘宁","文员",1013,"2000-12-17",8000.00,DEFAULT,20),
		(1002,"黛绮丝","销售员",1006,"2001-02-20",16000.00,3000.00,30),
		(1003,"殷天正","销售员",1006,"2001-02-22",12500.00,5000.00,30),
		(1004,"刘备","经理",1009,"2001-04-02",29750.00,DEFAULT,20),
		(1005,"谢逊","销售员",1006,"2001-09-28",12500.00,14000.00,30),
		(1006,"关羽","经理",1009,"2001-05-01",28500.00,DEFAULT,30),
		(1007,"张飞","经理",1009,"2001-09-01",24500.00,DEFAULT,10),
		(1008,"诸葛亮","分析师",1004,"2007-04-19",30000.00,DEFAULT,20),
		(1009,"曾阿牛","董事长",DEFAULT,"2001-11-17",50000.00,DEFAULT,10),
		(1010,"韦一笑","销售员",1006,"2001-09-08",15000.00,0.00,30),
		(1011,"周泰","文员",1008,"2007-05-23",11000.00,DEFAULT,20),
		(1012,"程普","文员",1006,"2001-12-03",9500.00,DEFAULT,30),
		(1013,"庞统","分析师",1004,"2001-12-03",30000.00,DEFAULT,20),
		(1014,"黄盖","文员",1007,"2002-01-23",13000.00,DEFAULT,10),
		(1015,"张三","文员",1007,"2002-01-23",53000.00,DEFAULT,50);
        
-- 1查询表中所有内容(10分)
select * from emp;

-- 2.查询表中姓名是张三的所有消息记录(10分)
select * from emp where name ename=‘张三‘;

-- 3.查询表中姓名是三个字组成的所有员工的ename,job,sal字段的对应信息(10分)
select * from emp where ename like ‘___‘;
select ename,job,sal where ename like ‘___‘

-- 4.查询表中empno字段从1004至1008所有员工的记录(10分)
‘between  范围区间 1004-1008

‘
select * from emp where empno between 1004 and 1008;


-- 5.查询表中所有job字段是文员并且姓名是黄盖的员工的所有信息(10分)
 select * from emp where job=‘文员‘ and ename=‘黄盖‘;

-- 6.查询表中在2001年以后入职的员工信息(10分)
select * from emp where hiredate>‘2001-1-01‘;

-- 7.查询表中奖金(COMM)是NULL的员工信息(10分)
	select * from emp where comm is null;								

sql语句练习

上一篇:windows下docker安装MySQL


下一篇:OpenTSDB简介