自己公司怎样做免费的网站,推广小说赚钱平台,检索标准的网站,网站建设培训资料目录 1、root用户密码忘记
2、SQL的分类
2.1、DQL数据查询语言
前言
2.1.1、设置别名
2.1.2、去除重复行
2.1.3、空值参与运算
2.1.4、着重号
2.1.5、显示表结构
2.1.6、算数运算符
2.1.7、比较运算符
2.1.8、逻辑运算符
2.1.9、位运算符
2.1.10、 模糊查询
2.1.…目录 1、root用户密码忘记
2、SQL的分类
2.1、DQL数据查询语言
前言
2.1.1、设置别名
2.1.2、去除重复行
2.1.3、空值参与运算
2.1.4、着重号
2.1.5、显示表结构
2.1.6、算数运算符
2.1.7、比较运算符
2.1.8、逻辑运算符
2.1.9、位运算符
2.1.10、 模糊查询
2.1.11、分页
2.1.12、 多表查询
2.1.12.1、多表查询的分类
2.1.12.2、笛卡尔积
2.1.12.3、join实现内、外连接
2.1.13、聚合函数
2.1.13.1、group by
2.1.13.2 having
2.1.14、子查询
2.2、DDL数据定义语言
2.2.1、 create、show...
2.2.2、alter、drop、rename..
2.3、DML数据操作语言
2.4、DCL数据控制语言 1、root用户密码忘记 不适用于所有版本新版本不能实现重置。这边建议直接重装。
重置一下密码的操作
1、通过任务管理器或者服务管理关掉MySQL服务进程。
2、通过命令行特殊参数开启mysql mysqld --defaults-fileD:\MySql\data\my.ini --skip-grant-tables 3、此时mysql服务进程已经打开并且不需要权限检查。
4、mysql -uroot 无密码登录服务器。另启动一个客户端进行。
5、修改权限表 use mysql; update user set authentication_stringpassword(新密码)where userroot and Hostlocalhost; flush privileges 6、通过任务管理器关掉mysql服务进程。
7、在此通过任务管理器打开mysql服务。
8、即可用修改后的新密码登录。
2、SQL的分类 在一些地方会把select语句看作一类语言DQL因为他的使用频率非常高。 2.1、DQL数据查询语言
前言 select SELECT * FROM table_name; 在这里 * 表示的是查询的是所有字段。
若是不需要查询所有的那就在星号的位置改为所需要查询的字段名多个的话用逗号隔开。 SELECT 字段1 字段2... FROM table_name; 单引号
mysql中查询的需要表示字符串的时候用单引号引起来表示字符串虽然双引号也不会错但是在标准中是单引号。 大小写
虽然在语句里面写的时候大小写不敏感比如字段名、表名、关键字、以及单引号括起来的字符串。
但是这是因为mysql不严谨的原因在其它数据库中这方面是很严谨的所以形成了一套使用上的规范关键字全大写表名、字段名等全部小写。
2.1.1、设置别名
就是在查询的时候将结果集的字段名改个名字又称别名。 使用 AS SELECT name AS new_name FROM table_name; 省略 AS 使用 空格 SELECT name new_name FROM table_name; 使用双引号
虽然使用单引号也可以在标准中是双引号单引号的话会显得很业余。 SELECT name new_name FROM table_name; 第三种表面上看相比于第二中会比较多余但是第三种情况适用于别名中有空格的情况。
2.1.2、去除重复行 SELECT DISTINCT id FROM table_namel 加一个distinct表示将结果集中重复的行删掉进行去重。在用的时候最好直接加载select后面也就是所有字段的前面因为实现的时候他会把distinct后面的字段进行整体去重因为后面的字段去重会导致前面没去重的字段和后面去重的字段名行数不同无法生成结果集而产生报错。
但是在用的时候经常是对单个字段结果集进行去重多个字段的话实际意义不大。
2.1.3、空值参与运算
若是在select中空值参与运算那么结果都是空值要是想解决这个问题可以在可能为空的值前面加上一个IFNUL(name, value),就说明如果为空则使用value来计算。
2.1.4、着重号
若是在使用的时候字段名、表名等跟关键字冲突。那么可以增加着重号表示该值不是关键字。
:着重号 SELECT * FROM order; 2.1.5、显示表结构
显示了表中字段的详细信息使用DESCRIBLE或者可以省略为DESC都是可以的。 DESCRIBE table_name DESC table_name 2.1.6、算数运算符 加
需要注意的是跟Java语言一样是存在隐式转换的不一样的是加号在java中可以起到连接作用但是在sql语句中只有加法运算。若是字符串参与运算会自动转为数字但若不是数字的字符形态那么会看成0进行计算。 减 - 乘 * 除 / 、 div
除法的运算结果都为浮点数不管数据类型如何结果都是小数。若是除以0那么结果为NULL。 模 % 、 mod
2.1.7、比较运算符 等于
在判断相等的时候两边若是字符串和非字符串进行比较那么则会把字符串进行隐式转换要么转为对应的整数转换失败则为0两边都是字符串的话则会直接进行字符串比较不会产生隐式转换。
空值进行运算结果都是空值。 安全等于
它的使用跟等号大多是一样的只有在空值的相关判断不一样它可以进行 1 null 这种判断判断是否为空。为NULL而生。 不等号
判断是否不相等不相等返回1有null参与结果就是null。 ! 大于号 大于等于 2.1.8、逻辑运算符 非 NOT 、 且 AND、 或 OR 、 || 异或 XOR 2.1.9、位运算符 按位与 按位或 | 按位异或 ^ 按位取反 ~ 右移 左移
2.1.10、 模糊查询 like 的匹配规则是 右边是一个字符串%表示0到任意个字符_ 表示一个字符。只要符合右边的规则就算匹配成功。
2.1.11、分页
通过关键字limit第一个参数为偏移量第二个参数为展示的数据条数。偏移量是指从第几条数据开始0的话就是从第一个开始n的话就是从第n1个开始。若是偏移量为0则可以省略不写。limit关键字需要放在查询语句的最后。 SELECT * FROM stable_name LIMIT 0, 20; 指的就是从第一条数据开始展示20条数据。
8.0新版mysql中一个新的关键字OFFSET就是偏移量会数据条数顺序反一下。 SELECT * FROM stable_name LIMIT 20 OFFSET 0; 2.1.12、 多表查询 建议多表查询的时候每个字段前都知名其所在的表是一个优化但是多表共有的字段在使用的时候必须要指明其所在的表名。
2.1.12.1、多表查询的分类
1、等值查询和非等值查询
2、自连接和非自连接 自连接就是自己和自己连同一张表多次使用拼成一张表。 非自连接就是不同的表拼成一张表。
3、内连接和外连接 内连接合并具有同一列的两个以上的表的行结果集中不包含一个表与另一个表不匹配的行。 外连接合并具有同一列的两个以上的表的行结果集中除了包含一个表与另一个表不匹配的行之外还查询到了左表或者右表中不匹配的行。 左外连接两个表在连接过程中除了返回满足连接条件的行以外还返回了左表中不满足条件的行。 右外连接两个表在连接过程中除了返回满足连接条件的行以外还返回了右表中不满足条件的行。
2.1.12.2、笛卡尔积
这里指的也就是交叉连接笛卡尔积只是一个数学运算。假设我们有两个集合为X 和 Y 那么笛卡尔积之后就会把所有的组合情况列出来在一个表里面组合数的个数即为两个集合中元素个数的乘积。
所以说这时候不是我们想要的表因为有太多的错误数据这时候只需要加一些筛选条件即可找那种两个表共同可以代表身份的字段。
首先要加上约束条件使表正确然后可以加一些其它的条件进行约束。 SELECT * FROM table_1, table_2 where table_1.id table_2.id; 如果在from 后面给表起了别名那么在后面使用的时候只能使用表的别名。
2.1.12.3、join实现内、外连接 注意左连接和右连接是相对与关键字左右两边的表left会把左边的的表全部输出right会把右边的表全部输出。 中图内连接 select * from table1 join table2 on table1.idtable2.id 左上图左外连接 select * from table1 left join table2 on table1.idtable2.id 右上图右外连接 select * from table1 right join table2 on table1.idtable2.id 左中图
左中图就是把左连接的结果集中只要左图为空的部分。 select * from table1 left join table2 on table1.idtable2.id where table1.id is null; 右中图 select * from table1 rightjoin table2 on table1.idtable2.id where table2.id is null; 左下图 满外连接
虽然这是对的但是mysql中不支持full关键字在其他的一些数据库中可以。 select * from table1 full join table2 on table1.idtable2.id sql中实现满外连接
就是把之前的左上图和右中图拼在一起使用的使union all关键字但是条件是他们的列数是相等的。 select * from table1 left join table2 on table1.idtable2.id union all select * from table1 rightjoin table2 on table1.idtable2.id where table2.id is null; 右下图
拿左中图和右中图拼在一起 select * from table1 left join table2 on table1.idtable2.id where table1.id is null union all select * from table1 rightjoin table2 on table1.idtable2.id where table2.id is null; 2.1.13、聚合函数
2.1.13.1、group by
分组函数就是将其通过某个字段进行分组然后统计相关信息。
结论 select中出现的非组函数的字段必须声明在group by中反之group by中声明的字段可以不出现在select中。 group by 声明在from后、where后、order by前 limit 前 单个字段分组
最好是将id也输出这样看起来知道哪个结果对应的是哪一组。 select id sumsalary from table_name group by id; 多个字段进行分组
直接在后面加就行。 select id add sumsalary from table_name group by id, add; 2.1.13.2 having
该关键字也是增加约束条件因为where中不能出现聚合函数但是having可以。在正常使用中where是对行进行筛选而having是对组进行筛选。
having可以代替where的所有工作但是在效率上没有where快所以在使用的时候能用where就用where。
having 必须声明在group by的后面没有的话基本用不上having。where已经可以解决这个问题 select id max(salary) from table_name group by id having max(salry) 1000; 2.1.14、子查询
就是查询语句的嵌套使用 select last_name, salary from table_1 where salary ( select salary from table_1 where last_name Abel; ); 称谓的规范外查询主查询、内查询子查询。 子查询在主查询之前一次执行完成。 子查询的结果被主查询使用。 注意事项 子查询要包含在括号内 将子查询放在比较条件的右侧 单行操作符对应单行子查询多行操作符对应多行子查询。
子查询的分类 角度一从内查询返回的结果的条目数 单行子查询 多行子查询 角度二内查询是否被执行多次 相关子查询 不相关查询
2.2、DDL数据定义语言
2.2.1、 create、show... 创建数据库 create database 数据库名; 创建数据库并指定字符集 b create database 数据库名 character set 字符集; 判断是否已经存在不存在则创建数据库 create database if not exists 数据库名; 创建数据表 括号里面填字段名以及字段的数据类型。if not exits 跟之前的作用是一样的可选。推荐加上。 create table if not exists table_name ( id int, name varchar(15), hire_date date ); 查看表结构 desc table_name 查看创建表的的语句结构 show create table table_name; 基于现有的表创建 就是把其中一个表的信息直接复制到新创建的表只要是select语句的结果集表都行多表单表查询的结果都可以。 create table table_2 as select id, name, salart from table_1;
2.2.2、alter、drop、rename.. 添加一个字段 alter table table add 字段名 数据类型; //默认插在末尾 alter table table add 字段名 数据类型 first; //插在开头 alter table table add 字段名 数据类型 after 字段1; //插在字段1后面 修改一个字段数据类型、长度、默认值 alter table table modify 字段名 数据类型 //只修改字段数据类型或长度 alter table table modify 字段名 数据类型 default 默认值; // 基本上都是修改长度不会修改类型非必要不修改类型 重命名一个字段 alter table 表名 change 字段名 新字段名 新数据类型 //可以不进行修改某一像 删除一个字段 alter table table drop column 字段名 重命名表 rename table 表名 to 新表名 alter table 表名 rename to 新表名 删除表 drop table 表名 drop table if exists 表名 清空表 truncate table 表名 2.3、DML数据操作语言 insert 一条一条的插入 // 没有指明插入的字段 insert into 表名 values data1, data2, data3; // 数据的顺序必须跟字段的顺序严格相同。顺序不能乱 //知名插入的字段 insert into 表名字段1 字段2 字段3// 没有知名的按默认值 values data1, data2, data3; // 数据的顺序必须跟指明的字段顺序相同。 多条插入 insert into 表名字段1 字段2 字段3// 没有知名的按默认值 values data1, data2, data3data1, data2, data3... ;//可以一直加下去 将查询结果插入 insert into 表名字段1 字段2 字段3 select 字段1字段2字段3 // 这里的字段不用跟之前完全一样但是数据类型要对上。 from 表名2 where 约束条件 delete delete 表名 where 约束条件 update
可以实现批量修改只需要合理的使用约束条件。 update 表名 set 字段1 新数据 // 支持运算操作 where 约束条件// 可选 2.4、DCL数据控制语言 commit 提交数据。一旦执行该操作数据就被永久的保存在了数据库中意味着数据不可以回滚。 rollback 回滚数据。一旦执行之后则可以实现数据的回滚。回滚到最近的一次commit之后。 注意DDL和DML操作不能进行回滚但是如果在执行操作之前执行set autocommit false则执行的DML操作就可以实现回滚但是DDL不行。