数据库基本操作
一、建库建表
1.创建数据库相关操作 (数据库名为 studentdb)
//1.创建数据库
create database studentdb;
//2.使用数据库
use studentdb;
//3.删除数据库
drop database studentdb;
2.创建表及其他操作
//1.表名为tbl_stu设置stu_id为主键、不能为空、自增
create table tbl_stu(
stu_id int not null primary key auto-increment,
stu_name varchar(11) not null,
stu_age int not null,
stu_sex char(2) not null,
stu_address varchar(200));
//2.删除表
drop table tbl_stu;
//3.修改表中的字段
alter table tbl_stu **modify** stu_name varchar(20) not null;
//4.删除表中的字段
alter table tbl_stu **drop** stu_address;
//5.添加表中的字段
alter table tbl_stu **add** stu_phone varchar(11);
删除表结构的用drop 删除表中数据的用delete
二、SQL语句(数据库操纵语言)
1.插入insert 语句
//1.向表中每一列都添加一项数据,stu_id是主键,可以使用默认值
insert into tbl_stu values (default,'小花',20,'女','陕西省西安市');
//2.向表中指定列添加数据
insert into tbl_stu(stu_name,stu_sex.stu_address) values ('强哥','男','陕西省渭南市');
//3.一次向表中添加多个数据
insert into tbl_stu values (default,'小花',20,'女','陕西省西安市'),
(default,'迪丽热巴',20,'女','新疆');
2.修改语句 update
//1.把学号为5的学生姓名改为 朱莉
update tbl_stu set stu_name='朱莉' where stu_id=5;
//2.把学号为4的学生姓名改为光头强,地址改为陕西省宝鸡市
update tbl_stu set stu_name='光头强',stu_address='陕西省宝鸡市' where stu_id=4;
//3.把表中没有填写地址的学生的 地址改为 未知
update tbl_stu set stu_address='未知' where stu_address is null;
//4.把姓名中带有'小'字的学生年龄设置为20
update tbl_stu set stu_age=20 where stu_name like '%小%';
//5.把表中学号在5-8之间学生的年龄加1
update tbl_stu set stu_age=stu_age+1 where stu_id>=5 and stu_id<=8;
3.删除语句 delete
//1.删除学号为4的学生
delete from tbl_stu where stu_id=4;
//2.删除没有联系方式的学生
delete from tbl_stu where stu_phone is null;
//3.删除有联系方式的学生
delete from tbl_stu where stu_phone is not null;
4.查询语句 select
order by 默认是升序,在sql语句的最后一句。
SQL会先按照第一排序规则进行排序,如果排序结果相同,会按照第二排序规则继续排序,如果不存在相同数据,则第二排序不起作用。例如下面的16
使用 as 起别名。
查询的sql语句,从原始表获取到需要的数据并形成一个虚表。我们查询到的结果都是虚表,还可以在虚表的基础上继续进行查询操作。
查询不对原始表中的数据进行任何操作。
//1.查询表中所有数据
select * from tbl_stu;
//2. 查询表中部分列数据
select stu_id,stu_name,stu_age,stu_address from tbl_stu;
//3.使用别名查询 给每一列起一个外号
select stu_id as '学号',stu_name as '姓名',stu_age as '年龄',stu_address as '地址' from tbl_stu;
//4.获取学号为4的学生信息
select * from tbl_stu where stu_id=5;
//5.获取学生学号大于等于并且小于等于7的学生信息
select * from tbl_stu where stu_id>=3 and stu_id<=7;
select * from tbl_stu where stu_id between 3 and 7;
//6.获取学生年龄为18,23,26岁学生的信息
select * from tbl_stu where stu_age=18 or stu_age=23 or stu_age=26;
select * from tbl_stu where stu_age in (18,23,26);
//7.获取姓名中含有 小 字的学生信息
select * from tbl_stu where stu_name like '%小%';
//8.获取姓名中第一个是’小‘的学生信息
select * from tbl_stu where stu_name like '小%';
//9.获取姓名中第一个字为 小 字,且只有两个汉字的学生信息
select * from tbl_stu where stu_name like '小_';
//10.获取姓名中最后一个字为 小 字,且只有三个汉字的学生信息
select * from tbl_stu where stu_name like '__小';
//11. 查询没有生日的学生信息
select * from tbl_stu where stu_birthday is null;
//12.查询所有 有生日 的学生信息
select * from tbl_stu where stu_birthday is not null;
//13.根据年龄升序<默认>排列查询
select * from tbl_stu order by stu_age asc;
//14.根据年龄降序排列查询
select * from tbl_stu order by stu_age desc;
//15.获得所有女生的信息,并按年龄降序排列
select * from tbl_stu where stu_sex='女' order by stu_age desc;
//16.按照年龄升序排列,如果年龄相同,就按身高降序排列
select * from tbl_stu order by stu_age asc,stu_height desc;
5.聚合查询
1.统计查询count(*|列名):一行中任何一列有数据就参与统计
2.求和查询 sum(列名)
3.求平均数查询 avg(列名)
4. 求最大值查询 max(列名)
5.求最小值查询 min(列名)
//1.获得学生的个数
select count(*) as '学生总数' from tbl_stu;
//2.效率高的查询 使用主键进行查询
select count(stu_id) as '学生总数' from tbl_stu;
//3.统计男生的数量
select count(stu_id) as '男生数量' from tbl_stu where stu_sex='男';
//4.计算所有年龄和
select sum(stu_age) from tbl_stu;
//5.计算学生的平均年龄
select avg(stu_age) from tbl_stu;
//6.计算学生中的最高身高
select max(stu_height) from tbl_stu;
//7.计算学生中的最低身高
select min(stu_height) from tbl_stu;
//8.获取最后一个添加的主键,要和insert一起使用
insert into tbl_stu values (default,'王宝强','男',30,'1989-07-07','山东省',168,'123456')
select last_insert_id()
6.分组查询
1.having 必须和group by 一起使用,单独不可以
2.limit a,b 两个参数意思:第一个参数表示起始下标,从0开始
第二个参数表示获取的个数
3.查询规则:先分组后排序
//1.分别统计男生女生的个数
select stu_sex,count(stu_id) '人数' from tbl_stu group by stu_sex
//2.统计来自不同城市的人数
select stu_address,count(stu_id) '人数' from tbl_stu group by stu_address
//3.分别统计男生女生个数,并按照降序排列(先分组后排序)
select stu_sex,count(stu_id) '人数' from tbl_stu group by stu_sex order by 人数 desc
//4.统计来自不同城市的人数,并获得人数大于2的城市及人数
select stu_address,count(stu_id) '人数'
from
tbl_stu
group by stu_address
having 人数>2
order by 人数 DESC
//5.获得年龄最大的学生及同年龄的人数
select stu_age,count(stu_id) '人数'
from tbl_stu
group by stu_age
order by stu_age desc
limit 0,1
//6.#获得人数最多的城市及人数
select stu_address,count(stu_id) '人数' from tbl_stu
group by stu_address
order by 人数 DESC
limit 0,1