MySQL之DML操作

有关数据表的DML操作:

INSERT INTO        DELETE、TRUNCATE        UPDATE        SELECT

条件查询        查询排序        聚合函数        分组查询

增加语句

增加语言,就是给某张表进行数据插入。--------insert

语法:

insert INTO table_name[(field1 [, field2 ……]) values(value1 [, vaule2 ……])  [,()]];

删除语句和TRUNCATE

删除语言,必须带上删除的条件!!!如果不带条件,则删除全表。---------delete

语法结构:

delete from table_name [where 条件];
truncate table table_name;

更新语句

更新就是修改表中的数据---------update 

语法结构:

update table_name set 字段1=新值 [, 字段2=新值, 字段3=字段3 + 1]   [where 条件];

replace语句

该语句是集更新和插入为一体的一个语句。如果表中没有这条数据,则执行插入,否则执行更新。

注意:replace的更新,本质是先删除,再插入。

语法:

replace into t_user(id, name, password) values(100, "test", "test");
replace into t_user(id, name, password) values(100, "testtest", "testtest");

select查询语句

在开发中,查询语句是使用最多,也是CRUD中,复杂度最高的sql语句。

语法结构:

select *|字段1 [, 字段2 ……] from 表名称 [, 表名称2……] [where 条件] [group by 字段 [having 分组后的筛选]] [order by 字段 [desc|asc] [字段2 [desc|asc] ……]] [limit 分页]

简单的sql查询

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;

分表原因

数据直接都存储在一张表中:

  • 如果数据很大,性能会出现问题

  • 将不同的数据,如果放在同一个表中,可能数据冗余

  • 数据冗余,会导致数据可能出错

将不同的类型,采用不同的数据表进行存储,如果两张表或者多张表之间存在关联关系,则可以采用外键来描述这种关联关系。

在主表中,一般是一个字段,该字段一般是从表的主键。

你可能感兴趣的:(mysql,数据库)