MySQL的基本概念以及基本使用

一、SQL语句介绍

1.什么是SQL?

    全称 structured query language,简称SQL,中文叫结构化查询语言。

    关系型数据库语言的国际标准:SQL92、SQL99

    不止是MySQL,其他数据库在SQL92或者SQL99这些国际SQL标准基础上,还扩展了自己的一些SQL语句,比如MySQL中的limit关键字。

2.SQL分类:

  • 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
  • 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
  • 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等
  • 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where

二、SQL语句的使用

   1.数据库操作:datebase

创建数据库:

  create database 数据库名;
  create database 数据库名 character set 字符集;

查看数据库:

查看数据库服务器中的所有的数据库:show databases;
查看某个数据库的定义的信息:show create database 数据库名;

删除数据库:

drop database 数据库名称;

其他命令:

切换数据库:use 数据库名;
查看正在使用的数据库:select database();

    2.表操作:table

创建表:

create table 表名(
   字段名 类型(长度) 约束,
   字段名 类型(长度) 约束
);
单表约束:
    主键约束:primary key
    唯一约束:unique
    非空约束:not null
    注意:主键约束 = 唯一约束 + 非空约束

查看表:

查看数据库中的所有表:show tables;
查看表结构:desc 表名;

删除表:

drop table 表名;

修改表:

alter table 表名 add 列名 类型(长度) 约束; 		--修改表添加列. 
alter table 表名 modify 列名 类型(长度) 约束;	    --修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束;	   --修改表修改列名.
alter table 表名 drop 列名;					--修改表删除列.
rename table 表名 to 新表名;					--修改表名
alter table 表名 character set 字符集;		--修改表的字符集

    3.插入记录:insert

insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表1 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表2 --将表2中查出的数据插入表1
insert into 表1 values select * from 表2   --将表2中查出的数据插入表1

注意事项:

   ①列名数与values后面的值的个数相等

   ②列的顺序与插入的值需要顺序一致

   ③列名的类型与插入的值的类型需要一致.

   ④插入值的时候不能超过最大长度.

   ⑤值如果是字符串或者日期需要加引号’’ (一般是单引号)

    4.更新记录:update

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;

注意事项:

    ①列名的类型与修改的值要一致.

    ②修改值得时候不能超过最大长度.

    ③值如果是字符串或者日期需要加单引号.

5.删除记录:delete

delete from 表名;
delete from 表名 where 条件;

注:delete与truncate的区别:

删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
所以truncate的效率更高i,特别是对于数据量特别大的表

三、SQL查询

1.简单查询

查询关键字:select   from  

如果需去除重复值 在列名前使用distinct 即可 :select distinct username from user

2.条件查询

关键字:where

select * from user where age > 25;

select * from user where name = '狗蛋';

注:where后条件使用方法

 

比较运算符 >  <  <=   >=   =  <> 大于、小于、大于(小于)等于、不等于
BETWEEN  ...AND... 显示在某一区间的值(含头含尾)
IN(.....) 显示在in列表中的值,例:in(1,2,3,4,5,100)
LIKE '李_' 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例:name like ‘_a%’;
IS NULL 判断是否为空
逻辑运算符 and 多个条件同时成立
or 多个条件任一成立
not 不成立

3.排序

关键字:order by   asc(升序)    desc(降序)

select * from user order by age desc;

4.聚合函数

特点:只对单列进行操作

常用的聚合函数:

sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数

5.分组

关键字:group by  having

注意:

    ①select语句中的列(非聚合函数列),必须出现在group by子句中

    ②group by子句中的列,不一定要出现在select语句中

    ③聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。

6.多表关联查询

①内连接:inner join 

内连接也叫等值连接,内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

select * from A inner join B on A.id = B.id

②外连接

  • 左外连接:left join 

select * from A left join B on A.id = B.id

  • 右外连接:right join

select * from A right join B on A.id = B.id

  • 全外连接MySQL不支持

注意:

通过业务需求,分析主从表
如果使用LEFT JOIN,则主表在它左边
如果使用RIGHT JOIN,则主表在它右边
查询结果以主表为主,从表记录匹配不到,则补null

7.分页查询

关键字:limit

    select * from table limit (start-1)*rows,rows; 其中start是页码,rows是每页显示的条数。

8.语法顺序和执行顺序

  • MySQL查询语法顺序:

    ①SELECT

    ②FROM

    ③LEFT JOIN

    ④ON

    ⑤WHERE

    ⑥GROUP BY

    ⑦HAVING

    ⑧ORDER BY

    ⑨LIMIT

  • MySQL的执行顺序:

    ①FROM(将最近的两张表,进行笛卡尔积)---VT1

    ②ON(将VT1按照它的条件进行过滤)---VT2

    ③LEFT JOIN(保留左表的记录)---VT3

    ④WHERE(过滤VT3中的记录)--VT4…VTn

    ⑤GROUP BY(对VT4的记录进行分组)---VT5

    ⑥HAVING(对VT5中的记录进行过滤)---VT6

    ⑦SELECT(对VT6中的记录,选取指定的列)--VT7

    ⑧ORDER BY(对VT7的记录进行排序)--游标

    ⑨LIMIT(对排序之后的值进行分页)

  • where条件执行顺序:

1.MySQL:从左往右执行where条件

2.Oracle:从右往左执行where条件

结论:在写where条件时,优先级搞得部分要去编写过滤力度最大的条件语句

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章