SQL语句

作者: PHPer_ | 来源:发表于2017-07-22 18:09 被阅读289次

    SQL简介

    什么是 SQL?

    • SQL 指结构化查询语言
    • 使我们有能力访问数据库
    • SQL 是一种 ANSI 的标准计算机语言(ANSI,美国国家标准化组织)

    SQL 能做什么?

    • SQL 面向数据库执行查询
    • SQL 可从数据库取回数据
    • SQL 可在数据库中插入新的纪录
    • SQL 可更新数据库中的数据
    • SQL 可从数据库删除记录
    • SQL 可创建新数据库
    • SQL 可在数据库中创建新表
    • SQL 可在数据库中创建存储过程
    • SQL 可在数据库中创建视图
    • SQL 可以设置表、存储过程和视图的权限

    结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

    SQL 语法

    一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。
    下面的例子是一个名为 "user" 的表:

    上面的表包含四条记录(每一条对应一个人)和六个列(id、姓名、性别、年龄、邮箱、qq)。

    需要在数据库上执行的大部分工作都由 SQL 语句完成。 下面的语句从表中选取 name 列的数据:

    SELECT name FROM user(作用:查询“user”表里“name”这列的所有内容)
    

    返回结果集如下:

    重要事项 一定要记住,SQL语句对大小写不敏感!

    SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据

    SQL SELECT 语句

    SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
    SQL SELECT 语法
    SELECT 列名称 FROM 表名称或者SELECT * FROM 表名称(星号(*)是选取所有列的符号)
    注意:SQL 语句对大小写不敏感。SELECT 等效于 select。

    //获取user表中name列和email数据列
    SELECT name,email FROM user
    

    SQL SELECT DISTINCT 语句

    在表中可能会包含重复值。这并不成问题,不过,有时希望仅仅列出不同(distinct)的值,关键词 DISTINCT 用于返回唯一不同的值。
    语法: SELECT DISTINCT 列名称 FROM 表名称

    SELECT distinct age FROM user
    

    SQL WHERE 子句

    WHERE 子句用于规定选择的标准。 WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
    语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
    下面的运算符可在 WHERE 子句中使用:

    注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=

    //查询年龄在28周岁的人员信息
    SELECT * FROM user WHERE age=28
    //查询年龄不等于28的人员信息
    SELECT * FROM user WHERE age<>28
    //查询年龄大于28的人员信息
    SELECT * FROM user WHERE age>28
    //查询年龄小于28的人员信息
    SELECT * FROM user WHERE age<28
    //查询年龄在28以上48以下的人员信息
    SELECT * FROM user WHERE age BETWEEN 28 AND 48
    //模糊匹配查询
    SELECT * FROM user WHERE email LIKE '%qq%'
    

    引号的使用

    SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,建议不要使用引号。
    文本值:
    这是正确的:

    SELECT * FROM user WHERE name='霍建华'
    

    这是错误的:

    SELECT * FROM user WHERE name=霍建华
    

    SQL AND & OR 运算符

    AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。AND 和 OR 运算符 AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

    //两个条件同时成立
    SELECT * FROM user WHERE age=28 AND sex=2
    //成立其中一个条件
    SELECT * FROM user WHERE age=28 OR age=38
    

    SQL ORDER BY 子句

    ORDER BY 语句用于对结果集进行排序。
    ORDER BY 语句用于根据指定的列对结果集进行排序。 如果希望按照降序对记录进行排序,可以使用 DESC 关键字。 如果希望按照升序对记录进行排序,可以使用 ASC 关键字。

    //升序
    SELECT * FROM user ORDER BY age ASC
    //降序
    SELECT * FROM user ORDER BY age DESC
    

    SQL GROUP BY 字句

    GROUP BY 语句用于对结果集进行分组。
    “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

    //Group By
    SELECT * FROM user GROUP BY age
    //Group By 和 Order By
    SELECT * FROM newtable GROUP BY age ORDER BY age ASC
    

    SQL INSERT INTO 语句

    INSERT INTO 语句用于向数据表中插入新的行。
    语法:INSERT INTO 表名(列名1,列名2......) VALUES(值1,值2,....)

    INSERT INTO user(name,sex,age,email,qq) values('李易峰',1,18,'liyifeng@163.com',69854521)
    

    SQL UPDATE 语句

    Update语句用于修改表中的数据
    语法:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 值

    UPDATE user SET name='鹿晗' WHERE id=5
    

    注意:修改表中数据时一定要带上where表达式,否则将是毁灭性的灾难,导致表中数据全部修改;

    SQL DELETE 语句

    DELETE语句用于删除表中的行。
    语法:DELETE FROM 表名 WHERE 列名 = 值

    DELETE FROM newtable WHERE id=5
    

    注意:删除表中数据时一定要带上where表达式,否则将是毁灭性的灾难,导致表中数据全部 ;

    SQL语句的规范

    1.SQL语句的保留字都大写
    2.SQL命令本身是不区分大小写的,但是PHP区分,所以字段名,表名之类的都按真实的大小写来写。
    3.分号是一条SQL命令的结束。PHP里面单条语句一般不需要写。
    4.整型值一般不需要加引号,加了也不为错。
    5.-- 代表SQL语句的注释
    6.写UPDATE语句和DELETE语句时,最好先写WHERE条件,避免对数据造成灾难性的破坏。

    SQL常用的运算符和函数

    AND 并且
    IN 包含的值,例如:WHERE ID IN(1,2,3,8,10)
    OR 或者
    =等于
    !=不等于
    <>不等于
    大于
    < 小于
    BETWEEN 数值 AND 数值
    RAND() 用在ORDER BY 的后面,随机表中数据
    DISTINCT(字段名) -- SELECT DISTINCT age FROM user --去掉重复值的结果
    COUNT(字段名) --统计行数,一般字段为主键
    MAX(字段名)
    MIN(字段名)
    ASC(正序),DESC -- 排序,默认情况下都是ASC
    字符串连接函数:
    CONCAT_WS('分隔符',第一个字符串或字段名,第2个字符串或字段名,第3个...)
    说明:连接后的字符会按前后顺序串在一起.
    取平均值函数:AVG

    SELECT AVG(字段名) FROM table_name
    UCASE转换成大写字母:
    LCASE转换成小写字母:
    SELECT UCASE(字段名) FROM tb_users
    SING()返回数值的符号,如果是负数,返回-1
    类似三元运算符的操作方法:

    SELECT CASE WHEN sex<age THEN sex ELSE age END FROM USER
    select (case when sex>age then sex else age end),(case when qq>age then qq else age end) from user
    

    SQL常用的查询语句

    SELECT fname,id FROM ttt WHERE id=1;
    SELECT fname,id FROM ttt WHERE fname='bbb';
    SELECT fname,id FROM ttt WHERE fname='bbb' OR fname='aaa';
    SELECT fname,id FROM ttt WHERE fname IN('bbb' ,'aaa');
    SELECT fname,id FROM ttt WHERE fname LIKE '%b%';
    SELECT fname,id FROM ttt WHERE fname LIKE '%b';
    SELECT fname,id FROM ttt WHERE fname LIKE '%b_';
    SELECT Fname from ttt where id>1;
    SELECT fname FROM ttt WHERE id>1 AND id<3; == SELECT fname FROM ttt WHERE id=2;
    SELECT * FROM ttt ORDER BY id ASC或者DESC --排序功能,ASC正序,DESC倒序
    SELECT * FROM ttt ORDER BY RAND() --随机取值
    SELECT * FROM ttt ORDER BY RAND() LIMIT 1; --随机并且每次只显示一条
    SELECT * FROM ttt LIMIT 1; --只显示一条
    SELECT * FROM ttt ORDER BY id DESC LIMIT 1;
    SELECT * FROM ttt LIMIT 3,2;
    SELECT * FROM ttt ORDER BY id DESC LIMIT 3,1;
    SELECT * FROM ttt ORDER BY id DESC,Fnum ASC;
    SELECT * FROM test ORDER BY CONVERT(Fname USING gbk); 中文排序
    SELECT * FROM TTT GROUP BY Fnum;
    //类似PHP的函数in_array()的功能
    SELECT * FROM ttt WHERE FIND_IN_SET(1,Fcateids);
    //AS后面的名称自定义,即别名
    SELECT COUNT(id) AS totals FROM ttt;
    SELECT * FROM tb_school WHERE id IN(select fid from tb_users);
    

    SQL常用的添加语句

    INSERT INTO 表名(字段列表) VALUES(字段值列表,与字段名一定要一一对应);

    例如:
    INSERT INTO ttt(name,num) VALUES('小崔',1);
    INSERT INTO ttt(name,num) VALUES('小王',1);
    INSERT INTO ttt(name,num) VALUES('小李',1);
    

    SQL常用的更新语句

    UPDATE 表名 SET 字段名='字段值' WHERE 条件

    例如:
    UPDATE ttt SET name='小崔' WHERE 条件;
    UPDATE ttt SET name='小崔';
    UPDATE ttt SET name='cccc' WHERE id=4; --不存在的数据,表不会被做任何更改
    UPDATE ttt SET num=num+1 WHERE id=1;
    

    SQL常用的删除语句

    DELETE FROM 表名 WHERE条件 --清空表,删除数据,不是删除表
    

    拓展

    • 有主从关系查询语句
    SELECT A.id,B.name,B.sex FROM product_category_test A,t2 B WHERE A.Fid=B.Fid;
    SELECT * FROM 一表 JOIN 二表 WHERE 一表.id = 二表.uid;
    
    • 无主从关系查询语句
    SELECT 字段名 FROM 一表 UNION SELECT 字段名 FROM 二表;
    
    • 去重统计


    select account,sum(price) as priceAll from betting where (account,price) in (select account,price from betting)
    

    任务

    复习今日所讲内容,反复练习SQL语句,熟练为止;

    相关文章

      网友评论

          本文标题:SQL语句

          本文链接:https://www.haomeiwen.com/subject/vnbukxtx.html