SQL:结构化查询语句
1.不区分大小写
2.每条语句以;结尾
SQL语句分为:
DDL:数据库定义语言,用来创建数据库,创建表格等
DML:数据库管理语言,增,删,改,查语句等
DCL:数据库操作语言,如修改数据库系统权限
DDL
1.查看数据库
show databases;
2.创建数据库
create database school(数据库名称)
3.删除数据库
drop database school(数据库名称)
4.使用数据库
use school(数据库名称)
5.查看数据库中的表格
show tables;
6.新建表格
create table 表格名称(
字段1 数据类型(长度) 缺省值,
字段2 数据类型(长度) 缺省值,
...
字段n 数据类型(长度)
)
create table student(
id int(5) primary key,
name varchar(10) ,
sex varchar(2),
age int(3),
grade double
)
数据类型
int:整型
varchar:可变字符串,如果字符串的长度少于定义的长度以实际长度为准
char:字符串,如果字符串的长度少于定义的长度以空格填充
double(float):浮点型
primary key:主键,主键不能重复,并且不能为空
不能超过定义数据类型的长度
7.查看表格结构
desc student(表格名称);
8.删除表格
drop table student(表格名称);
9.修改表格的结构
增加字段
alter table student add classid int(2);
删除字段
alter table student drop classid;
修改字段
alter table student change classid classid int(3);
DML语句:数据库管理语言(增,删,改,查)
1.增加一条记录
全字段添加
insert into student(表格名称) values(111,'zs','男',30,90,1);
指定字段添加
insert into student(id,name,age) values(112,'ls',40);
2.修改记录 可以and和or
update student(表格名称) set sex='女',grade=80,classid=3 where id=112;
将姓名为ww或者age为40的学生的成绩改为70
update student set grade=70 where name='ww' or age=40;
3.删除记录
delete from student(表格名称) where id=110;删除id为110的记录
delete from student where grade>=70;删除成绩大于或者等于70的记录
delete from student where id=111 and age=20;删除id为111并且年龄为20的记录
4.查询数据
查询所有数据
select * from student(表格名称)
查询年龄大于30的记录 > >= < <= and or
select * from student where age>30;
select * from student where age>40 and age<50;年龄在40到50之间的
select * from student where age between 40 and 50;//40到50之间的记录,包括边界值
select name,age from student where classid=1;//查询1班人的名字和年龄
select * from student where classid=1 and sex='男';//查询1班并且性别为男的
组函数
count(*) 计数 avg max min
select count(*) 人数 from student;//查询学生的数量并取个别名
select avg(grade) avg_grade from student;//查询学生成绩的评价值
模糊查询 %:代表匹配0个或者多个任意字符 _:匹配0个或者1个字符
select * from student where name like '%s%';//查询名字中有s字符的记录
select * from student where name like '_z%';//查询名字中z前面有0个或者一个任意字符,后面多个任意字符
排序 order by
select * from student order by grade;默认升序排序 asc 升序 desc 降序
分组查询group by
//查询各个班级的平均成绩
select avg(grade) 平均成绩,classid from student group by classid;
子句查询
查询成绩小于平均成绩的人
select * from student where grade<(select avg(grade) from student);
sql不够严谨
1.字符串单引号和双引号都可以用
2.数字字符串和数字之间可以自动转换
insert into student(id,name) values('234','sdg');//不报错
insert into student(id,name) values('23a4','sdg');//报错
mysql支持limit
select * from tablename limit 0,1
即取出第一条记录
select * from tablename limit 1,1
第二条记录
select * from tablename limit 10,20
从第11条到31条(共计20条)
从student表中查询计算机系和英语系的学生的信息
(in 关键字)
mysql> SELECT * FROM student WHERE department IN ('计算机系','英语系');
+-----+--------+------+-------+------------+--------------+
| id | name | sex | birth | department | address |
+-----+--------+------+-------+------------+--------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+--------+------+-------+------------+--------------+