黑马程序员技术交流社区
标题: 【济南中心】PHP课程同步笔记day17:数据库操作语言 [打印本页]
作者: 小鲁哥哥 时间: 2017-6-24 14:35
标题: 【济南中心】PHP课程同步笔记day17:数据库操作语言
本帖最后由 小鲁哥哥 于 2017-6-24 14:41 编辑
【济南中心】PHP课程同步笔记day17:数据库操作语言插入数据(insert)
4种形式:
形式1:
insert[into] 表名 [(字段名1,字段名2,.....)] values(值表达式1,值表达式2,.....),(...),....;
插入一行或多行数据库
形式2:
Replace [into] 表名 [(字段名1,字段名2,....)] values(值表达式1,值表达式2,....),(...),.....;
插入一行或多行数,可能会出现更新情况
形式3:
Insert [into] 表名 [(字段名1,字段名2,....)] select 字段名1 ,字段名2.... from 其他表名;
插入一行或多行数,是将select 语句所获得的结果数据插入指定表的制定字段;
形式4:
Insert [into] 表名 set 字段名1=值表达式1,字段名2=值表达式2,......;
说明:
1.重要观念:插入数据都应该理解为是以”行”为单位进行的。
2.Replace语法可以实现跟insert语法一样的效果,但还可以做到:如果主键重复了或唯一键重复了,则会先删除原来的数据,再插入新数据(相当于修改);
3.插入数据时的字段名和数据值之间都有”一一对应”关系
4.插入数据时,有的字段可以不用给定数据,则无需列出来,该字段的值会根据表的设定获得相应的”数据”,比如:自增长值,默认值,甚至是空值(允许空的时候)
5.对于字符串和时间类型的”直接值”(比如”abc”,”2017-06-24 13:31:31”),必须用单引号引起来!而数字一类就可以不用。
删除数据
形式:
Delete from 表名 [where条件] [order排序] [limit 限定];
说明:
1.删除数据也是以”行”为单位。
2.Where ,order,limit3个子句,虽然语法上都可以省略,但是order和limit很少用,而where几乎都需要用。
3.Order用于设定删除这些数据时的顺序;
4.Limit用于设定在前述排序下,删除多少条;
示例:
Delete from user_info where age>18 order by age desc limit 3;
//含义:删除user_info中年龄大于18的用户,并且按年龄倒序删除前3个。
修改数据
形式:
Update 表名 set 字段名1=值1,字段名2=值2,.....[where条件][order 排序][limit限定];
说明:
1.更新数据也是以”行”为单位;
2.设置某个字段的值的时候,如果是字符或时间类型的直接值,也要加单引号
3.Where,order,limit3个子句,虽然语法上都是可以省略的,但是order和limit很少用,而where几乎都需要用。
4.Order用于设定修改这些数据时的顺序
5.Limit用于设定在前述排序下,修改多少条
举例:
Update user_info set age=18,edu=’大学’,user_pass=md5(‘456’) where age<18 order by age limit 100;
基本查询
基本形式:
Select [all|distinct] 字段或表达式列表 [as 别名]
[from 子句]
[where 子句]
[group by 子句]
[having 子句]
[order by 子句]
[limit 子句];
说明:
1.上述select语句中,只有select部分是比不可少的,其他都可以省略
2.字段:指一个表中的字段名
3.表达式:是指一个常规的”运算”,甚至是最直接的”数据值”
4.All:表示取得的结果行都”输出”,默认可以不写,就表示all
5.Distinct:表示取得的结果行,”消除重复行”再输出
From子句
表示从哪个表(或视图)中去取出数据,可以认为就是数据的最原始来源,可以成为”数据源”。
形式有:
From 表名;
From 表名1,表名2,......;
From 表名1 连接方式 join 表名2 连接方式 join 表名3 .....;
Where子句
用于对从from子句所设定的数据源进行条件筛选的语句,往往都是使用某个字段名来做某种判断。判断如果成立,结果就是true,就表示该行”会取出”,否则就不会取出。
Where子句其实是对一个表中的”所有行”的数据进行”遍历”,依次进行判断。
Where子句执行的结果,都只是”true”或”flase”
Where子句中,可以用到很多的运算符:
算术运算符: +,-,*,/,%
比较运算符:>,>=,<,<=,=(等于),<>(不等于),!=(不等于)
逻辑运算符:and(与) or(或) not(非)
Is运算符: is运算符只用于对布尔值和空值进行判断,有如下4中情况:
Is true / is false / is null / is not null
Between运算符:
使用形式:
XX字段 between 值1 and 值2;
含义:
表示该字段的值,在给定的2个值之间(含),其相当于:
XX字段>=值1 and xx字段 <=值2;
In 运算符:
形式:
XX字段 in (值1,值2,....);
含义:
表示该字段的值,等于其中列出来的任意一个值,就算满足条件了。
Like运算符
语法形式:
XX字段 like ‘要查找的字符串’;
含义说明:
1.该运算符只能对字符串类型的字段进行运算;
2.其含义表示如果某个字段的值,符合(匹配)给定的要查找的字符串,就算满足条件;
3.该运算符是”模糊查找”的基本形式,并依赖于如下2个特殊的符合:
%(百分号):它代表”任意个数的任意字符”
_(下划线) :它代表”一个任意字符”
4.如果在需求中,就想要”%”或”_”这个符号,就将其转义
Group by 分组子句
语法形式:
Group by 字段1 [asc|desc],字段2 [asc|desc]....
含义:
表示将一个表中的”所有数据行”,按给定的某个字段进行分门别类区分,每一个不同的值就算一个组。
特别注意:
1.分组之后,结果数据中,”只有组”--即信息都应该是组的信息
2.后续的数据处理,也是以组为单位:比如求平均值,求最大值等
3.对于分组的查询,在select子句中,出现”字段”,只能是”组信息”,而不应是单个数据信息
Having子句:
跟where子句的用法和作用一样,唯一区别是:having子句跟在group by之后,用于对”分组之后的结果数据”进行筛选;
Order by 子句:
形式:
Order by 字段1 [asc|desc],字段2 [asc|desc]....
说明与含义:
1.用于将”前面”取得的数据,按给定的字段值的给定顺序(正序asc或倒序desc)排序
2.可以进行多重排序,每一重排序,都是在前一重排序的值相等的时候才有意义。
3.可以省略排序顺序设定,此时默认值是asc
Limit子句
形式1:
Limit 数量n;
含义:取出”前述所获得结果”数据的前n行;
形式2:
Limit 起始行号m,数量n;
含义:取出“前述所获得结果”数据的第m行开始的n行;m是从0开始算起的——注意:m跟数据表中的字段没有关系;当m等于0时,起始就是前一个形式的含义;
对select语句的整体理解、
说明:
1,除了select子句,各个其他子句都可以省略(语法上可行);
2,每一个子句,都是按该先后顺序出现,不可先后打乱顺序;
3,每个子句都可以看做是一种“计算”,他们在mysql的内部,其实是按该顺序先后进行的计算。
4,where需要有from才能出现;
5,having需要有group by才能出现;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |