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;