有关数据表的DML操作:
INSERT INTO DELETE、TRUNCATE UPDATE SELECT
条件查询 查询排序 聚合函数 分组查询
增加语言,就是给某张表进行数据插入。--------insert
语法:
insert INTO table_name[(field1 [, field2 ……]) values(value1 [, vaule2 ……]) [,()]];
删除语言,必须带上删除的条件!!!如果不带条件,则删除全表。---------delete
语法结构:
delete from table_name [where 条件];
truncate table table_name;
更新就是修改表中的数据---------update
语法结构:
update table_name set 字段1=新值 [, 字段2=新值, 字段3=字段3 + 1] [where 条件];
该语句是集更新和插入为一体的一个语句。如果表中没有这条数据,则执行插入,否则执行更新。
注意:replace的更新,本质是先删除,再插入。
语法:
replace into t_user(id, name, password) values(100, "test", "test");
replace into t_user(id, name, password) values(100, "testtest", "testtest");
在开发中,查询语句是使用最多,也是CRUD中,复杂度最高的sql语句。
语法结构:
select *|字段1 [, 字段2 ……] from 表名称 [, 表名称2……] [where 条件] [group by 字段 [having 分组后的筛选]] [order by 字段 [desc|asc] [字段2 [desc|asc] ……]] [limit 分页]
select 字段列表
from 表名称
where 条件
查询所有数据
select * from t_user;
查询需要的字段信息
select id, name, password from t_user;
查询一个字段,一个等值条件
select name from t_user where id = 1;
select语句中的特殊情况:
1、对数值型数据列、变量、常量可以使用算数操作符创建表达式(+ - * /)
2、对日期型数据列、变量、常量可以使用部分算数操作符创建表达式(+ -)
3、运算符不仅可以在列和常量之间进行运算,也可以在多列之间进行运算。例如:
SELECT last_name, salary, salary*12
FROM employees;
条件中,出现了相等值的判断,一般采用=
进行判断。
= 判断两次的值是否相等
is 判断空null
is not null 来判断不为空
<=> 可以判断null或者普通值
!= 不等于
<> 也是不等于
逻辑运算符是多条件关联的一种方式。
and
or
not
注意:在sql中,如果要提升条件的运行顺序,或者提高条件的优先级别,则需要使用括号来提升。
查询时,将结果的显示字段,使用一个其他名称来代替,就是别名。-------as
mysql> select count(*) as c from t_user;
+----+
| c |
+----+
| 10 |
+----+
1 row in set (0.00 sec)
1、使用WHERE子句限定返回的记录
WHERE子句在FROM 子句后
SELECT[DISTINCT] {*, column [alias], ...}
FROM table–[WHEREcondition(s)];
2、WHERE中的字符串和日期值
字符串和日期要用单引号扩起来,字符串是大小写敏感的,日期值是格式敏感的
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = "king";
3、WHERE中比较运算符:
SELECT last_name, salary, commission_pct
FROM employees
WHERE salary<=1500;
4、其他比较运算符
使用BETWEEN运算符显示某一值域范围的记录
SELECTlast_name, salary
FROM employees
WHERE salary BETWEEN 1000 AND 1500;
5、使用IN运算符
使用IN运算符获得匹配列表值的记录
SELECTemployee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (7902, 7566, 7788);
6、使用LIKE运算符
使用LIKE运算符执行模糊查询,查询条件可包含文字字符或数字
(%) 可表示零或多个字符, ( _ ) 可表示一个字符
SELECT last_name
FROM employees
WHERE last_name LIKE '_A%';
7、使用IS NULL运算符
查询包含空值的记录
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
8、逻辑运算符
使用AND运算符,AND需要所有条件都是满足T.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary>=1100–4 AND job_id='CLERK';
9、 使用OR运算符
OR只要两个条件满足一个就可以
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary>=1100 OR job_id='CLERK';
10、 使用NOT运算符
NOT是取反的意思
SELECT last_name, job_id
FROM employees
WHERE job_id NOT IN ('CLERK','MANAGER','ANALYST');
11、使用正则表达式:REGEXP
<列名> regexp '正则表达式'
select * from product where product_name regexp '^2018';
sql中,分组是一种统计概念。查询的数据,进行数据分析时,可能需要将相同的数据分成一组。
条件后面,当然是存在条件时,不过不存在,则是表名称后面 group by 字段。
select gender from t_user group by gender;
+--------+
| gender |
+--------+
| 女 |
| 男 |
+--------+
2 rows in set (0.00 sec)
注意:分组查询时,查询字段必须是分组的字段,或者是聚合函数。
发现,如果直接在分组后的结果集上进行条件判断,将条件写在where中,会报错,因为:结果集是分组后才能做的判断,而where实在查询前的条件判断。
所以不能使用where,必须使用having,having必须写在group by之后,没有分组,就不能写having,但是分组可以没有having。
select gender, count(gender) from t_user group by gender having count(gender) > 5;
+--------+---------------+
| gender | count(gender) |
+--------+---------------+
| 女 | 6 |
+--------+---------------+
1 row in set (0.00 sec)
将查询结果,以特定的顺序展示(升序或者降序)。语法结构:
# 语法结构
order by 字段
order by 字段 asc|desc;
order by 字段 asc|desc, 字段2 ;
如果写了多个字段,则会按第一个字段排序
select语句,查询数据时,可能结果会非常多,此时就不能直接展示,分页展示。
总数量(all_data):查询 select count(*)
每页展示的数量(page_size):程序员定
当前页(cur_page):默认第一页,用户自己点击选择
总页数(all_page):总数量 % 每页的数量 == 0 整除后的商 : 商 + 1
limit num # 查询多少条
limit num1, num2; # num1: 偏移量, num2 : 每页的数量
limit cur_page * (page_size - 1), page_size;
数据直接都存储在一张表中:
如果数据很大,性能会出现问题
将不同的数据,如果放在同一个表中,可能数据冗余
数据冗余,会导致数据可能出错
将不同的类型,采用不同的数据表进行存储,如果两张表或者多张表之间存在关联关系,则可以采用外键来描述这种关联关系。
在主表中,一般是一个字段,该字段一般是从表的主键。