1.SQL对数据库进行操作
*创建数据库 create database 数据库名称; 【示例:create database itheima;】
*查看数据库 ————— show databases;
*查看某个数据库的定义信息 show create database 数据库名称;
*修改数据库 ————— alter database 数据库名称 character set 字符集 collate 校对规则; (collate 校对规则可以不写,不写系统会默认校对规则) 【示例:alter database itheima character set utf8;】
*删除数据库 drop database 数据库名称; 【示例:drop database itheima;】
*切换(选择、使用)数据库 use 数据库名称; 【示例:use itheima;】
*查看当前正在使用的数据库 select database();
2.约束
*主键约束: primary key 主键约束默认就是唯一 非空的 【一般一个表里面只有一个主键约束】
*唯一约束: unique
*非空约束: not null 【该字段可以出现重复的值,但是不能为空】
3.SQL对表的操作
*SQL查看表
*查看某个数据库下的所有的表 show tables; 【table后面有个s】
*查看某个表的结构详细信息 desc 表名; 【示例:desc user;】—表名随便取
*SQL删除表
*直接彻底删除表格 drop table 表名; 【示例:drop table user;】
*摧毁表 truncate table 表名; 【示例:truncate table user;】
*SQL修改表
*修改表:添加列 alter table 表名 add 列名 类型(长度)约束; 【示例:alter table user add image varchar(100);】—约束可以不写,系统默认自带约束
*修改表:修改列类型,长度和约束 alter table 表名 modify 列名 类型(长度) 约束; 【示例:alter table user modify image varchar(150);】
*修改表:删除列 ————– alter table 表名 drop 列名; —————————-【示例:alter table user drop age;】
*修改表:修改列名称 alter table 表名 change 旧列名 新列名 类型(长度)约束; 【示例:alter table user change image pic varchar(150);】
*修改表:修改表名(比较少用) rename table 原表名 to 新的表名;————————【示例:rename table user to employee;】
*修改表:修改表的字集(比较少用) alter table 表名 character set 字符集; 【示例:alter table employee character set gbk;】
4.SQL对数据库表的记录进行操作(重点)
*SQL添加表的记录(表名为student)
*添加某几列 insert into student(id,username,password)values(null,’aaa’,’123’);
*添加所有列 insert into student values(null,’bbb’,’123’,23,’1993-09-01’);
*添加中文记录 insert into student values(null,’张三’,’123’,23,’1993-09-01’);
*SQL修改表的记录(表名为student)
*修改某一列的所有值 update student set password=’abc’;
*按条件修改数据 update student set password=’xyz’ where username = ‘bbb’;
*按条件修改多个列 update student set password=’123’,age=34 where username=’aaa’;
*SQL删除表的记录(表名为student)
*删除某一条记录 delete form student where id=2;
*删除表中所有记录 delete form student;
5.SQL查看表的记录(重点)
*基本查询(表名为exam)
*查询所有学生考试成绩信息 select*from exam;
*查询所有学生的姓名和英语成绩 select name,english from exam;
*查询英语成绩信息(不显示重复的值) select distinct english from exam; //distinct不显示重复信息
*查看学生姓名和学生的总成绩 select name,english+chinese+math from exam;
*别名查询(换个见名知意的名字) select name,english+chinese+math as sum from exam;
*条件查询(表名为exam)
*模糊查询表记录(表名为exam)
*like ‘李_’ :名字中必须是两个字,而且是姓李的。
*like ‘李%’ :名字中姓李的学生,李子后可以是1个或任意个字符。 【有两个字或者三个字或者四个字都可以】
*like ‘%四’ :名字中以四结尾的。
*like ‘%王%’ :只要名称中包含这个字就可以。
*条件查询表记录(表名为exam)
*查询李四学生的成绩 select*from exam where name=’李四’;
*查询名称叫李四的学生并且英文大于90分 select*from exam where name = ‘李四’ add english > 90;
*查询姓李的学生的信息 select*from exam where name like ‘李%’;
*查询英语成绩是69,75,89学生的信息 select*from exam where english in (69,75,89);
*排序查询(表名为exam)
*查询学生信息,并且按照语文成绩进行排序 select*from exam order by chinese; 【没有写升序倒序,系统默认为升序】
*查询学生信息,并且按照语文成绩倒序排序 select*from exam order by chinese desc;
*查询学生信息,先按照语文成绩进行倒序 select*from exam order by chinese desc,english asc;
排序,如果成绩相同在按照英语成绩升序
*查询姓李的学生的信息,按照英语成绩降序排序 select*from exam where name like ‘李%’ order by english desc;
*分组统计查询(表名为exam)
**聚合函数使用
A: sum();
*获取所有学生的英语成绩的总和 select sum(english) from exam;
*获取所有学生的英语成绩和数学成绩总和 select sum(english),sum(math) from exam;
*查询姓李的学生的英语成绩的总和 select sum(english) from exam where name like ‘李%’;
*查询所有学生各科的总成绩 select sum(english)+sum(chinese)+sum(math) from exam;
B: count();
获得学生的总数 select count() from exam;
获得姓李的学生的个数 select count() form exam where name like ‘李%’;
C: max();
*获得数学成绩的最高分 select max(math) from exam;
D: min();
*获得语文成绩的最小值 select min(chinese) from exam;
E: avg();
*获取语文成绩的平均值 select avg(chinese) from exam;
*分组查询表记录(表名为orderitem)
按商品名称统计,每类商品所购买的个数 select product,count() from orderitem group by product;
*按商品名称统计,每类商品所花费的总金额 select product,sum(price) …
*按商品名称统计,统计每类商品花费的 select product,sum(price) from orderitem group by product having sum(price)
总金额在5000元以上的商品
*按商品名称统计,统计每类商品花费的总金额
在5000元以上的商品,并且按照总金额升序排序 select product,sum(price) from orderitem group by product having sum(price)>5000 order by sum(price) asc;
总结:S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
顺序是不可颠倒的,如果里面有些是没有的,比如没有条件where,那么可以不要,但是只要代码里面有这些基础语法的,总的顺序不可颠倒
where后面不可以有聚合函数
================================================================================================================
****课外老师添加SQL对数据库和表的语法操作部分
1.
– 创建itheima数据库
CREATE DATABASE itheima;
– 选择itheima数据库
USE itheima;
– 查看现有的所有数据库
SHOW DATABASE;
– 删除数据库
DROP DATABASE itheima;
– 创建数据表
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT, 【create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);】
sname VARCHAR(20) NOT NULL,
sage INT NOT NULL,
score DOUBLE
);
– 查看目前itheima数据库中所有的数据表
SHOW TABLES; 【查看数据库所有数据表,table后面有个s】
– 查看某个表的详细信息
DESC student;
– 修改表结构:添加一个tel列
ALTER TABLE student ADD tel VARCHAR(30);
– 修改表结构:将tel列的数据类型修改为int
ALTER TABLE student MODIFY tel INT;
– 修改表结构:将tel列改名为newtel列
ALTER TABLE student CHANGE tel newtel VARCHAR(40) NOT NULL;
– 修改表结构:将newtel列删除
ALTER TABLE student DROP newtel;
– 删除数据表
DROP TABLE student;
2.
– 创建itheima的数据库
CREATE DATABASE itheima;
– 选择itheima数据库
USE itheima;
– 创建一个学生表
CREATE TABLE student1(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) UNIQUE,
sage INT NOT NULL,
score DOUBLE,
birthday DATE 【date最后一个拼音是e不是a】
);
– 操作数据:添加数据
/*student1
insert into 表名 (字段名1,字段名2,…) values (值1,值2,…);
insert into 表名 values (所有的字段的值);
*/
INSERT INTO student1(id,sname,sage,score,birthday)VALUES(1,’张三’,20,66.6,’2017-01-03’); 【每个字段之间用逗号隔开,姓名、日期用单冒号标识】
INSERT INTO student1 VALUES(2,’李四’,21,77.7,’2017-01-04’);
INSERT INTO student1 VALUES(NULL,’王五’,22,88.8,’2017-01-05’); – null用来表示主键自动增长,可以批量添加
INSERT INTO student1 VALUES(NULL,’赵六’,23,90,’2017-01-06’),
(NULL,’周七’,24,91,’2017-01-07’),
(NULL,’田八’,25,92,’2017-01-08’); – null可以用来表示自动增长,在这里表示id号自动增长,null可以批量添加,中间用逗号隔开就行
– 操作数据:查询数据
/*
查询所有的数据:select * from 表名;
查询名称为周七的记录:select * from student where sname=’周七’;
*/
SELECT*FROM student1; – 查询到所有的表里面的数据 *表示所有的
SELECT*FROM student1 WHERE sname=’周七’; – 查询姓名为周七的数据
SELECT sname,sage FROM student1 WHERE sname=’周七’; – 只能看到周七的姓名和年龄
– 操作数据:修改数据
/*
修改数据,将王五的年龄修改为35岁
update 表名 set 字段=修改的值 where 字段=查询的值;
*/
UPDATE student1 SET sage=35 WHERE sname=’王五’; 【where表示具体的条件,或者可以理解成哪,比如该题,获取哪个的姓名,等于王五】【如果重名,就获取唯一的id,就是id=3】
UPDATE student1 SET sage=35; 【修改指定字段(列名)所有的值】
– 操作数据:删除记录
/*
将田八记录删除掉
delete from 表名 where 字段=值;
*/
DELETE FROM student1 WHERE sname=’田八’;