基础SQL操作(一)

1. 初识sql

MySQL通过命令行导入sql脚本

  1. 下载示例数据库(yiibaidb)
  2. 通过命令行创建数据库并导入
// 登录
➜ mysql -uroot -p

// 创建数据库, 切换的到新创建的库CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;use yiibaidb;

// 导入刚下载的脚本
➜ source ~/Documents/MySQL/source/yiibaidb/yiibaidb.sql;

// 导入完毕后,查询导入的数据select city,phone,country from `offices`;

2. 什么是SQL, 什么是MySQL?

SQL是一种用于操作数据库的语言。SQL是用于所有数据库的基本语言。不同数据库之间存在较小的语法更改,但基本的SQL语法基本保持不变。SQL是S tructured Q uery Language 的简短缩写。SQL是操作关系数据库管理系统的标准语言。

MySQL是MYSQL是数据库软件。使用MYSQL存储,检索,修改和管理数据库的RDBMS。

3. 常用SQL语句

查询解释语句

解释语句关键: explain

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。(QEP:sql生成一个执行计划query Execution plan)

# 查询语法
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

# 示例
select * from runoob_tbl;

# 解释语句
explain select * from servers;

去重语句关键字:DISTINCT

SELECT DISTINCT name, id FROM users;

SELECT *, COUNT(DISTINCT name) FROM table GROUP bY name

查询前n条数据 LIMIT

SELECT id, name FROM users LIMIT n;	// 查询前n条数据

SELECT id, name FROM users LIMIT 1, 4; // 查询2、3、4条数据

CASE … WHEN语句

# 语法
CASE   <单值表达式>
        WHEN <表达式值> THEN <SQL语句或者返回值>
        WHEN <表达式值> THEN <SQL语句或者返回值>
        ...
        WHEN <表达式值> THEN <SQL语句或者返回值>
        ELSE <SQL语句或者返回值>
END
 
# 示例
select *,(CASE sex WHEN '1' THEN '男' WHEN '0' THEN '女' ELSE '保密' END) as sex_text from user

条件查询 WHERE

SELECT select_list FROM table_name WHERE search_condition;
通配符描述
%替代 0 个或多个字符
_替代一个字符
[charlist]字符列中的任何单一字符
[^charlist] 或 [!charlist]不在字符列中的任何单一字符
操作符描述
+加法运算
_减法运算
*字符列中的任何单一字符
/不在字符列中的任何单一字符
%求余运算,返回余数
比较运算符描述
==加法运算
<=>安全的等于
<> 或者 !=不等于
<=小于等于
>=大于等于
>大于
<小于
IS NULL值是否为NULL
IS NOT NULL值是否不为NULL
LEAST当有2个或多个参数时,返回最小值
GREATEST当有2个或多个参数时,返回最大值
BETWEEN AND判断一个值是否落在两个值之间
IN判断一个值是否在两个值之中
LIKE通配符匹配
REGEXP正则匹配

GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

使用 WITH ROLLUP
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

# 语法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

# 示例
SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;

ORDER BY , ASC 是升序,DESC是降序,默认情况是按升序排列。

SELECT column1, column2,...
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...

MySQL 函数

SQL编程格式的优化建议

4. 作业练习

-- 创建数据库
CREATE DATABASE db_demo;


-- # 任务1
-- 创建数据表
CREATE TABLE email
(
  ID INT NOT NULL PRIMARY KEY,
  Email VARCHAR(255)
);

-- 插入数据
INSERT INTO email
VALUES('1', 'a@b.com');

INSERT INTO email
VALUES('2', 'c@d.com');

INSERT INTO email
VALUES('3', 'a@b.com');


-- 查找重复的邮箱
-- 思路:现将数据根据Email分组,并统计数量,数量大于1的则为重复数据
SELECT Email
FROM email
GROUP BY Email
HAVING COUNT(*) > 1;

在这里插入图片描述


-- # 任务2
-- 创建数据表
CREATE TABLE World
(
  name VARCHAR(50) NOT NULL,
  continent VARCHAR(50) NOT NULL,
  area INT NOT NULL,
  population INT NOT NULL,
  gdp INT NOT NULL
);

-- 插入数据
INSERT INTO World
VALUES('Afghanistan', 'Asia', 652230, 25500100, 20343000);

INSERT INTO World
VALUES('Albania', 'Europe', 28748, 2831741, 12960000);

INSERT INTO World
VALUES('Algeria', 'Africa', 2381741, 37100000, 188681000);

INSERT INTO World
VALUES('Andorra', 'Europe', 468, 78115, 3712000);

INSERT INTO World
VALUES('Angola', 'Africa', 1246700, 20609294, 100990000);

-- 查找大国: 面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万)
SELECT name, population, area
FROM World
WHERE area > 3000000 OR (population > 25000000 AND gdp > 20000000);

在这里插入图片描述

参考地址:

  1. MySQL教程
  2. http://m.elecfans.com/article/623725.html
  3. MySQL Explain详解
  4. mysql distinct 去重、group by 用法解析(详细)
  5. select case when if 的一些用法
  6. MySQL(六)之MySQL常用操作符
  7. MySQL GROUP BY 语句
  8. SQL编程格式的优化建议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值