MYSQL基本用法及加深

一、简单SQL语句:

(一)查询:

1.查:select语句:忽略;
2.查唯一: Select distinct返回唯一结果集:

select distinct * from  *

3.查条件:

SELECT * FROM Websites WHERE country='CN';

4.查排序: order by排序:

SELECT column1, column2, ...FROM table_name ORDER BY column1, column2, ... ASC|DESC;

(二)插入:

1.插入: INSERT INTO插入:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

(三)更新:

1.更新: UPDATE :

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

(四)删除:

1.删除: DELETE:

DELETE FROM table_name WHERE condition;

二、SQL 基本语法:

(一)查询指定数目条数:(重点)

1.关键字: SQL Server:TOP; MySQL:Limit ; Oracle: ROWNUM;
2.注意:
(1)这里MySQL和Oracle的区别之一:(常问的)limit是MYSQL特有的,Oracle有rownum。
(2)limit是取结果集中的部分数据,这是它的作用。
(3)语法机制:limit startIndex ,length。
案例一:取工资前五名的员工

MySQL:SELECT ename,sal
FROM emp
ORDER BY sal desc
LIMIT 0,5;
ORACLE:SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

(4)知识点:limit是最后一个环节。故回顾补充一下Sql执行顺序。
select distinct * from * left join * on * where* group by * having * order by * limit *。
from,on,join,where,group by,having,slelct,distinct,orderby,limit。
注意:连接是先on再join
(5)通用的标准分页SQL:每页显示3条记录:
第1页:0,3;
第2页:3,3;
第3页:6,3;
第pagenum页:limit (pagenum-1)*pagesize,pagesize;

java代码:
int pagenum=2;
int pagesize=10;
...sql:
limit (pagenum-1)*pagesize,pagesize;

(二)模糊查询:

1.关键字: LIKE;
2.通配符:
(1)‘%’替代一/多字符
(2)‘_’替代一个字符
(3)[charlist] 字符列中的任何单一字符:
(4)[^charlist]或者[!charlist] 不在字符列中的任何单一字符

SELECT column_name(s)
FROM table_name
WHERE column LIKE pattern;

(三)查询多个值:

1.关键字: IN;

SELECT column1, column2, ...
FROM table_name
WHERE column IN (value1, value2, ...);

(四)查询两值之间:

1.关键字: BETWEEN ;
2.不在范围: NOT BETWEEN;
3.带有 IN 的 BETWEEN :

SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND country NOT IN ('USA', 'IND');

(五)别名:

1.关键字: AS ;
2.列别名,表别名 ;

MYSQL:SELECT w.name, w.url, a.count, a.date 
FROM Websites AS w, access_log AS a  
WHERE a.site_id=w.id and w.name="菜鸟教程";

(六)连接:

1.关键字: JOIN;
2.等值连接: on后面为等值a. * =b. * ,所以为等值连接。
内连接中的非等值连接: 最大的特点是on后面不是等量关系。
自连接: 一张表看做两张表,自己连自己。
内连接和外连接的区别:
内连接:ab两张表一起查能后匹配上的部分。( join中间省略了一个INNER,可以省略)
外连接:ab两张表,主表中的数据都查出来,捎带着副表中的数据也把他匹配出来。(Left Join,Right Join中间省略了一个OUTER,可以省略)
总结: INNER和OUTER都可以省略,区别内外连接的方法是有没有Left,Right
3.具体使用如下图:
在这里插入图片描述

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;

(七)合并多个查询结果:

1.关键字: UNION;
2.注意: 合并时头部数据类型相同,名称相同,顺序相同,使用 UNION ALL 来选取重复的值!:

SELECT country, name FROM WebsitesWHERE country='CN'
UNION ALL
SELECT country, app_name FROM appsWHERE country='CN'
ORDER BY country;

(八)表复制到表:

1.关键字: INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到另一个新表中。

INSERT INTO table2 SELECT * FROM table1;

(九)外键:

**1.关键字:**FOREIGN KEY,

CREATE TABLE Orders
(O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
);

(十) 限制值范围:

1.关键字: CHECK,限制值得范围
2.注意: mysql和Oracle写法不同。

MYSQL:
CREATE TABLE Persons
(P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
);
Oracle:
CREATE TABLE Persons
(P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

(十一)设置默认值:

1.关键字: DEFAULT 约束用于向列中插入默认值。

CREATE TABLE Persons(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes');

(十二)创建索引:

1.关键字: CREATE INDEX。用户无法看到索引,它们只能被用来加速搜索/查询。
2.注释: 更新带索引的表也需要更新索引,浪费时间,所以最好要在经常查询的表上创建索引。
3.创建唯一索引: CREATE Unique INDEX。

CREATE INDEX index_name
ON table_name (column_name);

(十三)撤销索引:

1.关键字: DROP INDEX。

DROP INDEX index_name;

(十四)更改表:

1.关键字: ALTER TABLE。添加、删除或修改列。
2.添加,删除,修改。

添加:ALTER TABLE table_name ADD column_name datatype;
删除:ALTER TABLE table_name DROP COLUMN column_name;
修改:ALTER TABLE table_name MODIFY COLUMN column_name datatype;

(十五)自增主键字段:

1.关键字: AUTO INCREMENT。

CREATE TABLE Persons
(ID int NOT NULL AUTO_INCREMENT,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255),
 Address varchar(255),
  City varchar(255),
  PRIMARY KEY (ID)
 )

(十六)SQL日期处理:

1.常用的内建日期处理函数:
NOW():返回当前的日期和时间;
CURDATE():返回当前的日期;
CURTIME():返回当前的时间;
DATE():提取日期或日期/时间表达式的日期部分。
注:SQL处理如果只有日期处理,注意格式就行,如果加上了时间的处理,那就比较复杂了。

(十七)聚合操作指定条件:

1.关键字: HAVING。
2.使用: 它往往与Group By一起使用,用来为聚合指定条件。(要理解:where只能指定行的条件,不能指定组的条件,所以有了having)。
3.如下sql:

SELECT cno, COUNT(*) nums 
FROM tbl_student_class 
GROUP BY cno 
HAVING COUNT(*) = 3;

4、注意:WHERE 先过滤出行,然后 GROUP BY 对行进行分组,HAVING 再对组进行过滤,筛选出我们需要的组。where行,having组。
在这里插入图片描述

三、SQL 函数:

(一) Aggregate 函数**

1.计算从列中取得的值,返回一个单一的值:
AVG() - 返回平均值
COUNT() - 返回行数
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。

(二)Scalar 函数:

1.基于输入值,返回一个单一的值:
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式

四、SQL 执行顺序(必须背熟):

在这里插入图片描述

Select distinct*** from*** JOIN *** on *** where *** group by *** having *** order by *** limit ***
顺序:1from 2on3 join 4where 5group by 6having 7select 8distinct 9orderby 10limit

接下来的问题(必问且不会):

1、手写SQL:写SQL经常考察group by、内连接和外连接。
2、SQL优化:有没有SQL优化经验。SQL怎么进行优化。优化Mysql数据库的8个方法。
3、索引:有哪几种索引。什么时候该(不该)建索引。Mysql索引的数据结构。
4、Explain:Explain包含哪些列。Explain的Type列有哪几种值。
5、MYSQL和ORACLE的区别
6、事务:事务的使用场景。事务的特性。常见的隔离级别。
7、存储引擎:InnoDB的主要特性是什么。其他的MySQL存储引擎。
8、三大范式:三大范式介绍及其应用

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值