为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
整个表可以看作为一个类,表的一行称之为一条记录、类的实例,表中一列代表具体类实例的数据
操作数据库
-
使用root用户登录
mysql -u root -p :
-
查看有多少数据库
show databases;
-
创建数据库
create database test;
-
指定默认字符集创建数据库
create database test -> default character set utf8 -> ;
-
查看数据库的默认字符集
show create database test;
-
-
删除数据库
drop database test;
-
修改默认字符集
alter database test default character set gbk;
-
选中数据库
use test;
操作表
-
查看所有表
show tables;
-
创建表
create table student(stu_id int, stu_name varchar(20), stu_age int);
-
查看表结构
desc student;
-
删除表
drop table student;
-
添加字段
alter table student add column stu_gender varchar(20);
-
删除字段
alter table student drop column stu_gender;
-
修改字段类型【stu_age字段类型改为varchar(10); column可不写】
alter table student modify column stu_age varchar(10);
-
修改字段名称【stu_age字段名称修改为 age varchar(16)】
alter table student change column stu_age age varchar(16);
-
修改表名称
alter table student rename to teacher;
操作数据
-
增加数据
-
插入所有字段,必须按顺序插入
INSERT INTO student VALUES(2,'李四','男',11);
-
插入部分字段
INSERT INTO student(id,username) VALUES(3,'王五');
-
-
修改数据
-
修改表中所有该字段数据
update student SET age=16;
-
条件修改【修改id=1的学生年龄为25】
update student SET age=25 where id=1;
-
条件修改,多个字段
update student SET username='凤姐',age=16 where id=1;
-
-
删除数据
-
删除表中所有数据
-
可带条件,仅删除数据,不包含约束,删除的数据可回滚
DELETE FROM student;
-
不可带条件,数据和约束都可以删除,删除的数据不可回滚
TRUNCATE TABLE student;
-
-
条件删除
delete from student where id=3;
-
查询数据【select】
-
查询所有列
select * from student;
-
查询指定列
select username,gender from student ;
-
查询时指定别名 as
select username AS '用户名',gender AS '性别' from student ;
-
查询时添加常量列
select id,username,gender,age,'三年级二班' AS '年级' from student ;
-
查询时合并列 【chinese和english两列相加,合并列只能合并数值类型的字段】
select id,username,(chinese+english) as '总成绩' from student ;
-
查询时去除重复记录(DISTINCT)
-
查询学生的性别 男 女 或地区去重
SELECT DISTINCT gender FROM student; SELECT DISTINCT(gender) FROM student;
-
条件查询
逻辑条件 and(与)、or(或)
-
查询id 为 2 ,且姓名为李四的学生
select * from student where id=2 and username='李四' ;
-
查询id为2或者姓名为凤姐的学生
select * from student where id=4 or username='凤姐'
比较条件: > 、< 、>=、<=、= 、<>(不等于) between and (等价于>= 且 <=)
-
查询语文成绩大于80的学生
select * from student where chinese>80;
-
查询语文成绩大于等于75 且 小于等于90的学生
select * from student where chinese>=75 and chinese<=90; select * from student where chinese between 75 and 90;
判空条件(null、空字符串): is null / is not null ; ='' / <>''
-
查询地址为空的学生
SELECT * FROM student WHERE address IS NULL ;
-
查询地址为空字符串的学生
SELECT * FROM student WHERE address='';
-
包括null和空字符串
SELECT * FROM student WHERE addredd IS NULL OR address='';
-
查询有地址的学生
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';
模糊条件 like
替换标记: % 表示任意个字符;_ 表示一个字符
-
查询姓张的学生
select * from student where name like '张%';
-
查询姓张,且姓名只有两个字的学生
select * from student where name like '张_';
聚合查询
-
查询所有学生的语文课总成绩
select SUM(chinese) as '语文课总成绩' from student;
-
查询所有学生的语文课的平均分
select avg(chinese) as '语文课平均分' from student;
-
查询语文课最高分
select max(chinese) as '语文最高分' from student;
-
查询语文课最低分
select min(chinese) as '语文课最低分' from student;
-
统计有多少学生(count(字段))
select count(*) from student; select count(id) from student ; 注意:count()函数统计的数量不包含null的数据 使用count统计表的记录数,要使用不包含null值的字段
分页查询(limit 起始行,查询几行)
起始行从0开始
分页:当前页 每页显示多少条
-
分页查询当前页的数据的sql:
SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条;
-
例子
查询第1,2条记录(第1页的数据):SELECT * FROM student LIMIT 0,2; 查询第3,4条记录(第2页的数据):SELECT * FROM student LIMIT 2,2; 查询第5,6条记录(第3页的数据):SELECT * FROM student LIMIT 4,2; 查询第7,8条记录 (没有记录不显示):SELECT * FROM student LIMIT 6,2;
查询排序(order by )
语法 : order by 字段 asc/desc
ASC : 顺序,正序。数值:递增,字母:自然顺序(a-z)
DESC: 倒序,反序。数值:递减,字母:自然反序 (z-a)
-
默认情况下,按照插入记录顺序排序
select * from student;
-
按照id排序
select * from student order by id ASC; //按照id顺序排序 select * from student order by id DESC; //按照id倒序排序
-
多个排序条件:按照英语成绩正序顺序,如果英语成绩相同,按照语文成绩倒序
select * from student order by english ASC,chinese DESC;
分组查询(group by)
-
查询男女的人数
select gender,COUNT(*) as '人数' from student GROUP BY gender;
-
查询总人数大于2的性别
- 查询男女的人数
2)筛选出人数大于2的记录(having : 分组之后的筛选 )
- 查询男女的人数
注意: 分组之前条件使用where关键字,分组之后条件使用having关键字
select gender,COUNT(*) from student GROUP BY gender HAVING COUNT(*)>2;