zoukankan      html  css  js  c++  java
  • SQL学习笔记

    一、SQL 简介

    1. SQL(Structured Query Language),指结构化查询语言,让您可以访问和处理数据库。

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

    3. 表是数据库对象,一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:"Websites"),表包含带有数据的记录(行)。

    4. MySQL 安装:https://www.runoob.com/mysql/mysql-install.html

    三、SQL语法

    1. SQL对大小写不敏感,SELECT 与 select 是相同的。

    2. 某些数据库系统要求在每条 SQL 语句的末端使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上
    的 SQL 语句。

    3. SQL中使用单引号或双引号括住的是文本,没有用引号括住的是数值。

    四、SQL 命令

    一些最重要的 SQL 命令

    SELECT - 从数据库中提取数据
    UPDATE - 更新数据库中的数据
    DELETE - 从数据库中删除数据
    INSERT INTO - 向数据库中插入新数据
    CREATE DATABASE - 创建新数据库
    ALTER DATABASE - 修改数据库
    CREATE TABLE - 创建新表
    ALTER TABLE - 变更(改变)数据库表
    DROP TABLE - 删除表
    CREATE INDEX - 创建索引(搜索键)
    DROP INDEX - 删除索引

    1. SELECT 语句

    SELECT 语句用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集。

    格式:

    SELECT column1_name,column2_name FROM table_name;
    SELECT * FROM table_name;

    举例:

    SELECT name,country FROM Websites; //从"Websites"表中选取name和country列
    SELECT * FROM Websites; //从Websites表中选取所有列
    SELECT * FROM Persons WHERE ROWNUM <=5; //从Persons表中选择前5列数据
    SELECT * FROM Websites LIMIT 2; //只选出Websites表中所有列的前2行
    SELECT TOP 50 PERCENT * FROM Websites; //选出Websites表中所有列的前50%的数据
    select top 5 * from table;    //选出表table的前5行
    select top 5 * from table order by id desc //选出表table的后5行,desc表示降序排列,asc表示升序
    SELECT DISTINCT country FROM Websites; //选出country列,重复相同的内容舍去。

    MySQL 支持 LIMIT 语句来选取指定的条数数据

    2. WHERE

    WHERE子句用于过滤记录,提取那些满足指定条件的记录。

    格式:

    SELECT column1_name,column2_name
    FROM table_name
    WHERE column1_name operator value;

    例子:

    SELECT * FROM Websites WHERE country='CN'; //选中所有的列,选中country=‘CN’的行
    SELECT * FROM Websites WHERE id=1; //选中所有的列,选中id列中值为1的行

    WHERE 子句中的运算符:
    = 等于
    <> 不等于。注意,在SQL的一些版本中,也可被写成 !=
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    BETWEEN 在某个范围内
    LIKE 搜索某种模式,进行模糊查询
    IN 指定针对某个列的多个可能值

    逻辑运算的优先级:()  not  and  or

    例子:

    select * from emp where ename='SMITH'; //选中ename列为'SMITH'的行
    select * from emp where sal > 2000 and sal < 3000; //选中sal列中的值在2000~3000之间的行
    Select * from emp where sal between 2000 and 3000; //选中sal列中的值在2000~3000之间的行
    select * from emp where sal > 2000 or comm > 500; //选中sal列中的值大于2000 或 comm 列中值大于500的行
    select * from emp where not sal > 1500; //选中sal列中不大于1500的行
    select * from emp where comm is null; //判断为空的列
    Select * from emp where sal in (5000,3000,1500); //查询EMP表sal列中等于5000,3000,1500的行。
    select * from emp where ename like 'M%'; 
    /*
    查询emp表中ename列中有M的值的行,M为要查询内容中的模糊信息。
    % 表示多个字值,_ 下划线表示一个字符,
    M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
    %M% : 表示查询包含M的所有内容。
    %M_ : 表示查询以M在倒数第二位的所有内容。
    */

    注意:where预计只能select imei,不能select imei as imei, 这个是group关键字的。

    3. AND & OR 运算符

    AND & OR 运算符用于基于一个以上的条件对记录进行过滤。

    实例:

    SELECT * FROM Websites
    WHERE alexa > 15
    AND (country='CN' OR country='USA'); //sql中‘=’是等号

    4. ORDER BY 关键字

    ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序,默认按照升序对记录进行排序,如果需要按照降序对记录进行排序,可以使用 DESC 关键字。

    格式:

    SELECT column1_name,column2_name
    FROM table_name
    ORDER BY column1_name,column2_name ASC|DESC;

    实例:

    SELECT * FROM Websites
    ORDER BY alexa;    //默认是升序排列
    
    SELECT * FROM Websites
    ORDER BY alexa DESC; //使用降序排列
    
    SELECT * FROM Websites
    ORDER BY country,alexa; //按多列进行排序,首先会按country排序,在此基础上再按alexa排序

    5. INSERT INTO 语句

    INSERT INTO 语句用于向表中插入新记录。

    格式:

    INSERT INTO table_name
    VALUES (value1,value2,value3,...); //不指定插入数据的列名,只提供插入的值。
    
    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...); //需要指定列名及被插入的值。

    实例:

    INSERT INTO Websites (name, url, alexa, country)
    VALUES ('百度','https://www.baidu.com/','4','CN'); //这里没有指定第一列的id,但是id会自动化变化
    
    insert into selectselect into from 的区别
    insert into table1 select * from table2 where neza='abc' //将表2的neza列为'abc'的行插入到表1中,要求表table1必须存在
    select * into table1 from table2 where neza='abc' //将表2的neza列为'abc'的行插入到表1中,要求表table1不存在

    6. SQL UPDATE 语句

    UPDATE 语句用于更新表中的记录。

    格式:

    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value; //WHERE子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

    7. SQL DELETE 语句

    DELETE 语句用于删除表中的行。

    格式:

    DELETE FROM table_name
    WHERE some_column=some_value; //WHERE子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

    删除所有的数据:

    DELETE FROM table_name;
    或
    DELETE * FROM table_name; //删除记录时要格外小心,因为不能重来!

    8.distinct 关键字

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。

    select distinct name from A

    select distinct name,id from A : 实际上是根据“name+id”来去重,distinct同时作用在了name和id上,这种方式Access和SQL Server同时支持。

    select count(distinct imei) from A;   --表中imei去重后的数目, SQL Server支持,而Access不支持
    select count(distinct name, id) from A;  --SQL Server和Access都不支持

    9. nvl函数

    NVL(expr1, expr2) //如果oracle第一个参数为空(NULL)那么返回第二个参数的值,如果第一个参数的值不为空(NULL),则返回第一个参数的值。

    NVL2(expr1, expr2, expr3) //如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

    五、补充

    and android_version like '8%' --前缀9为P,前缀8为O,模糊匹配Android版本

    SQL标准中字符串是使用单引号而不是双引号。

    参考:https://www.runoob.com/sql/sql-delete.html

  • 相关阅读:
    EF工作流程
    EF简单的CodeFirst示例(自己创建数据库,不使用数据迁移)
    VS2017连接MySQL数据库
    Entity Framework简介
    ADO.NET
    linq连接
    linq语法
    linq和转换运算符
    学习MVC之前必须掌握的c#知识
    java 中 System
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/11355683.html
Copyright © 2011-2022 走看看