一、基本概念
1、什么是SQL语句?
Structured Query language 结构化查询语句;
2、SQL语句分类:
DDL数据定义语言(data definition language)如:建库,建表;
DML数据操纵语言(data manipulation language)如:对表中的记录操作增删改
DQL数据查询语言(data query language)如:对表中进行查询操作
DCL数据控制语言(data control language)如:用户权限的设置
3、sqlyog在导入数据库时会将同名的库覆盖,不是文件名是其里面创建的数据库名;
二、DDL语句:数据定义语言
创建表:
create table 表名(
属性名 属性类型,
属性名 属性类型,
属性名 属性类型
);
查看表的结构:desc 表名;
三、DML语句:数据操纵语句
1、增加数据
插入一条全部数据:insert into 表名 values(值1,值2,值3。。。);
一次插入多条数据:insert into 表名 values(值1,值2,值3。。。),(值1,值2,值3。。。);
插入部分字段,没有插入的字段,默认值就是null,也支持一次插入多个数据:
insert into 表名 (字段名称1,字段名称2,字段名称3) values(值1,值2,值3);
INSERT INTO student VALUES(1,'高圆圆',42,'女','西安市') ;
INSERT INTO student VALUES(2,'文章',35,'男','咸阳市'),(3,'马伊琍',40,'女','上海市'),(4,'马保国',56,'男','宝鸡市') ;
INSERT INTO student(id,NAME,age,gender) VALUES(5,'王宝强',35,'男') ;
INSERT INTO student(id,NAME,age,gender) VALUES(6,'张三丰',60,'男'),(7,'令狐冲',38,'男') ;
2、修改数据
修改符合条件的数据的该字段值:
update 表名 set 字段名称1=值1,字段名称2=值2,字段名称3=值3 where 条件;
修改所有数据的该字段值:
update 表名 set 字段名称1=值1,字段名称2=值2;(将所有数据均修改)
UPDATE student SET age = 25,gender ='女',address='上海市' WHERE id = 6 ;
UPDATE student SET address = '鄠邑区' ;
3、删除数据
删除满足条件的该条数据:delete from 表名 where 条件;
删除表中所有数据:(两种方式)
方式一:delete from 表名; 方式二:truncate table 表名;
DELETE FROM student WHERE id = 7 ;
DELETE FROM student ;
TRUNCATE TABLE student;
面试题:drop,delete与truncate删除表时有什么区别?
drop table 表名:是删除整个表文件,属性结构也不保留;
delete from 表名:是删除表中的数据,表的属性结构还在,它针对id(非业务字段:设置主键并且自增长),它不影响自增长主键的这个值; (数据库约束后面讲)
truncate table 表名:是删除表中的数据,表的属性结构还在,它相当于删除该表后,重新建立了一张一模一样的表,会影响主键的值;
四、DQL语句:数据查询语句
1、基本的查询语句select:
查询全表数据:select * from 表名;
实际开发中查询全部字段,把字段名称全部写上:select 字段名称1,字段名称2。。 from 表名;
SELECT
id,NAME,age, sex,address,math,english
FROM
student3;
查询字段时,可以给字段起一个别名:字段名 as “别名名称”,as可以省略,
SELECT
id AS '编号',
NAME AS '姓名',
age AS '年龄',
sex AS '性别',
address AS '地址',
math AS '数学成绩',
english AS '英语成绩'
FROM
student3 ;
表也可以起别名:
SELECT
s.`id` '学生编号',
s.`name` '学生姓名',
s.`age` '学生年龄',
s.`sex` '学生性别',
s.`address` '学生地址',
s.`math` '数学成绩',
s.`english` '英语成绩'
FROM
student3 s ;
查询部分字段:select 字段名称1 “别名” 字段名称2 “别名” from 表名;
别名只会在显示的当次改变列的名称,别不改变数据库中的真实名称。
SELECT
NAME '姓名',
math '数学成绩',
english '英语成绩'
FROM
student3 ;
去除数据库中的重复数据:select distinct 字段名称1,字段名称2 from 表名;
select distinct * from 表名;去除表中重复数据
SELECT DISTINCT address FROM student3;
SELECT DISTINCT * FROM student3;
2、条件查询语句
条件查询 where 关键字
-- 2.1)使用 赋值运算符=,比较运算符 <,<=,>=,>,!=, mysql中的不等于 <>
-- 2.2)Java中逻辑运算符:&&,|| mysql推荐使用 and , or
-- 2.2)针对两个范围查询: 可以使用&&,可以使用and, 也可以 "字段名称 between 值1 and 值2"
SELECT id,name,address FROM student3 WHERE age IN(18,20,45) ;
SELECT id,name,address FROM student3 WHERE age BETWEEN 20 AND 30 ;
SELECT id,name,address FROM student3 WHERE age > 20 ;
SELECT id,name,address FROM student3 WHERE age > 20 ;
SELECT * FROM student3 WHERE age > 20 ;
-- Java语言中:去判断某个条件的内容为null ,mysql语言不支持这个格式 ==null
-- 需求:查询学生的英语成绩为null的学生所有信息
-- select * from student3 where english == null ;
-- mysql中判断某个字段为null,使用的语法是 is null
-- 判断某个字段不为null,使用的语法是 is not null
SELECT * FROM student3 WHERE english IS NULL ;
SELECT * FROM student3 WHERE english IS NOT NULL ;
3、int类型字段求和
(字段名称1 + 字段名称2) “别名”;
注意:int类型的值 + null 值 = null;mysql提供函数 ifnull(字段名称,值);如果字段名称是null,给4一个默认值。
SELECT NAME '姓名',(math + english) '总分' FROM student3;
SELECT NAME '姓名',(math + ifnull(english,0)) '总分' FROM student3;
4、模糊查询
where条件后面加入模糊查询 ---关键字 like
select 字段列表 from 表名 where 字段名称 like '%xxx%' ;
%:代表任何个字符也可以为空字符(使用居多):网站门户系统---"搜索商品" ,模糊搜索;
_:代表某个单个字符;
SELECT * FROM student3 WHERE NAME LIKE "_化_";
5、聚合函数查询
作用:能够针对int类型形成单行单列数据。(可以认为他是用来操作列的)
-- select 聚合函数 from 表名 where 指定条件;
-- count(字段名称):查询表中数据个数 ,字段名称使用都是id,非业务字段;--计算总的数据数,属性相同时也增加个数,只有数据为null时,不计入个数;
-- avg(字段名称): 查询这个字段中平均值
-- sum(字段列表):求和函数
-- max(字段名称):最大值
-- min(字段名称):最小值
SELECT COUNT(id) '数据条数' FROM student3 ;
SELECT AVG(math) '数学平均分' FROM student3;
//此句没有ifnull则会造成该调数据为null
SELECT SUM(math+IFNULL(english,0)) '总分' FROM student3;
SELECT MAX(math) '数学最高分' FROM student3 ;
SELECT min(math) '数学最低分' FROM student3 ;
select语句嵌套select语句 --- 子查询(注意写法)
SELECT
*
FROM
student3
WHERE
math > (SELECT AVG(math) FROM student3) ;
6、排序查询(默认为升序排列)
1.按照升序或者降序排列输出:
2.先满足条件,才能排序!where 须在order by之前:
3.多个字段要同时排序,首先第一个字段排序规则,然后才是第二个字段:
select 字段列表 from 表名 order by 字段名称1 排序规则(asc升序或者desc降序)
SELECT * FROM student3 ORDER BY math ASC ;
SELECT NAME ,math FROM student3
WHERE math > 56 ORDER BY math DESC ;
SELECT * FROM student3
ORDER BY math DESC , english ASC ;
ascending order:升序排序 Descending order:降序排序