*select *from 表名
1.语法:
select
字段名
from
表明列表
where
条件列表
group by
分组字段
order by
排序
limit
分页限定
2.基础查询
1.多个字段的查询
select 字段名1,字段名2 ... from 表名
2.去除重复
*distinct
3.计算列
*一般可以使用四则运算计算一些类的值(一般只会进行数值型)
*ifnull (val1,val2):null参与运算,计算结果都为null
*val1:哪个字段判断是否为空
*val2:如果该字段为null后的替换值
4.起别名
*as: as也可以省略
3.条件查询
1.where 字句后跟条件
2.运算符
*>,<,<=,>=,<>
* between ...and
* like
*i s null
* and 或&&
or 或 ||
*not 或 !
重点学习查询语句
SQL语句的 单表查询:
where 子句查询:
使用where 但条件查询
多条件查询 select * from 表名
--select * from stu where 字段名 is null 字段值为null
select * from stu where is null;
---查看入职日期在81年之后的员工信息
select * from stu where is nor null;
select * from stu where hiredate >='01-1月-1981' order by hiredate
--多个条件使用and关键字进行连接,筛选的是所有条件的值--查询名字中包含s的,以s开头的,以s结尾的,以第二个字符为s的
select * from stu where name like "%s%";s在中间的
select * from stu where name like "s%";以s开头的
select * from stu where name like "%s";以是结尾的
select * from stu where name like "_s%";以任意字符开头,查询第二个字符为s的
_ 表示任意一个字符 % 表示任意多个字符
select * from stu where name like '%/_%' escape '/';
‘/‘’’代表转义字符, escape 是将特殊字符转成转义字符--装一字符可以将特殊字符装成普通字符
select * from stu for update //查询一份可以更改内容的表
select * from stu order by hiredate ;
---查询工资在2000-3000之间的员工
select * from stu where sal>=2000 and sal <=3000;
select * from stu where sal between 2000 and 3000;
--查询工作为saleman ,analyst ,manager 的员工信息
---使用or关键字,进行 或条件的查询
select * from stu where job=';saleman' or job = 'analyst' or job = 'manager' order by job ;
----使用in关键字来查询或的 只能是其中一项
select * from stu where job in ('saleman",'analyst','manager');
多条件子句查询(and ,or ,like .is null,is not null, in .between and)
DQL:查询语法
*1.排序查询 *语法: order by 子句
desc:降序 asc :默认
* order by 排序字段1,排序方式1,...
* 2.聚合函数 :将一列数据作为一个整体,进行纵向计算
*count :计算个数
*max :计算最大值
* min:计算最小值
* sum:求和
* 注意:聚合函数的计算,排除非空的计算3.分组查询:
语法:group by
注意:
1.分组之后查询的字段:分组字段,聚合函数
2.where和having的区别 ?
1.where 在分组之间进行限定,如果不满足条件,则不参与分组,having 在分组之后,如果不满足条件,则不参与分组,结果不会被查询出来
2,where后不可以跟聚合函数,having可以进行聚合函数的判断
4.分页查询
1.语法:limit开始的索引,每页查询的条数
SELECT * FROM stu LIMIT 0,2;
SELECT * FROM stu LIMIT 2,2;
SELECT * FROM stu LIMIT 4,2;
-- 当前的得索引: (当前的页数-1) *每页显示的条数
练习:
*--创建表st
*CREATE TABLE st (
id INT ,
NAME VARCHAR(20),
age INT,
gender VARCHAR(4),
salary DOUBLE(7,2),
insert_time TIMESTAMP
);
DESC st;
INSERT INTO st (id,NAME,age,salary,insert_time)
VALUES(1001,"王二丫",1,5000.0,NULL);
SHOW TABLES;
SELECT * FROM st; -- 查询st表
INSERT INTO st VALUES(1004,"赵无极",24,"男",45678.2,NULL);
ALTER TABLE st
TRUNCATE TABLE stu;
SELECT * FROM stu;
-- 插入数据
INSERT INTO stu VALUES(1004,"赵敏",34,54,NULL,NULL,"男");
UPDATE stu SET id=1001 WHERE NAME="www";
UPDATE stu SET NAME ="王小宁" WHERE id =1001;
UPDATE stu SET gender ="女" WHERE id = 2004;
-- 查询 模糊查询
SELECT NAME FROM stu LIKE"张%";
SELECT * FROM stu;
SELECT id,age,score,id+age,id+score,FROM stu;
SELECT id, age ,id+age sumo FROM stu;
SELECT id FROM stu WHERE age BETWEEN 18 AND 89;
SELECT id FROM stu WHERE age IN(34,54,235,34);
SELECT id , NAME FROM stu WHERE NAME LIKE "_三%";
SELECT id ,NAME FROM stu WHERE NAME LIKE "___";
SELECT id ,NAME FROM stu WHERE NAME LIKE "%张%";
-- 排序查询
SELECT * FROM stu ORDER BY insert_time;
SELECT COUNT(IFNULL(birthday,0)) FROM stu;
SELECT COUNT(birthday) FROM stu ;
SELECT COUNT(*) FROM stu;
SELECT SUM(salary) FROM stu;
SELECT AVG(id) FROM stu;
-- 分组查询
SELECT gender ,AVG(id) FROM stu GROUP BY gender;
SELECT gender ,AVG(id),COUNT(id) 人数
FROM stu WHERE id >1500 GROUP BY gender;
SELECT gender ,AVG(id),COUNT(id) 人数
FROM stu WHERE id >1500 GROUP BY gender HAVING COUNT(id)>1;
-- 聚合函数
SELECT gender ,AVG(id),COUNT(id) 人数
FROM stu WHERE id >1500 GROUP BY gender HAVING 人数>1;
SELECT * FROM stu LIMIT 0,2;
SELECT * FROM stu LIMIT 2,2;
SELECT * FROM stu LIMIT 4,2;
-- 当前的得索引: (当前的页数-1) *每页显示的条数
约束
*概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
* 分类:
* 主键约束 :primary key
* 非空约束 :not null
* 唯一约束 :unique
* 外键约束 :foreign key
*
*非空约束 ;not null
1.创建表时 添加约束
CREATE TABLE stt(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空);
2.创建标完成后,添加非空约束
Alter table stu modify name varchar(20);
*唯一约束:unique,某一列的值不能重复
1.创建表时
create table stt(
id int,
iphone_number varchar(20) unique);
2.创建表之后
Alter table stt modify iphone_number varchar(20) unique;
3.删除唯一约束
Alter table stt drop index phone_number;
4.唯一约束可以有null值,但是只能有一条记录为null
主键约束:primary key
*1.注意:
1.非空且唯一,
2.一张表只能由一个字段为主键
3.主键就是表中记录的唯一标识
2.在创建时,添加主键约束
CREATE TABLE stt(
id INT PRIMARY KEY,
NAME VARCHAR(20) UNIQUE);
3.删除主键
Alter table stu modify id int primary key;
4.创建完表后,添加主键
Alter table stu modify id int primary key ;
5.自动增长
概念:如果某一列是数值类型,使用auto_increment 可以完成值的自动增长。
1.创建表时自动增长
CREATE TABLE stuu ( id INT PRIMARY KEY AUTO_INCREMENT,-- 给主键添加约束 NAME VARCHAR(20));
INSERT INTO stuu VALUES(NULL,'wsw');-- 删除自动增长
2.创建表后添加自动增长
ALTER TABLE stuu MODIFY id INT auTO_INCREMENT;
3.删除自动增长
ALTER TABLE stuu MODIFY id INT ;
*外键约束 :foreign key
1.在创建表时 ,可以添加外键,让表和表产生关系,从而保证数据的正确性。
*语法:
create table 表名(
外键列
constraint 外键名称 foreign key(外键列名称));
2.在创建表后,添加外键,
ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY(dep_id) REFERENCES department(id);
Altertable 表名 add constraint 外键名称 foreign key (外键字段) reference
主表名 (主表列名称)
3.删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;