zoukankan      html  css  js  c++  java
  • SQL的基础语法

    前言:平常写项目都是用的一些框架 例如:Hibernate,Mybatis

    今天被人问到基础sql语法时,却茫然了...

    可能是平常用到的sql语句太过于简单了吧。

    在这里把sql语句做一个全面的梳理.

     

    基础阶段

    1.select

    select 列名 from 表名

    select * from Student 显示Student所有信息

    2.distinct

    select distinct 列名 from 表名 显示表中唯一的列名(去除重复)

    3.where

    select * from Student where name='张三' 条件选择

    where里还能添加 between 、=、!=、>、<、like 、and、or等

    select * from Student where age>20

    4.and和or 把两个或者多个条件连接起来

    select * from Student where name='张三' and age=20

    select * from Student where name='张三' or age=20

    5.order by

    用来排序的,可以根据字母排序也可根据数字排序,有升序和降序两种 默认为升序,降序加上DESC

    select * from Student order by age

    6.insert into

    插入语句。

    insert into student(name,age) values ('李四',21)

    7.update

    update用于更新数据

    update Student set age=22 where name='张三'

    8.delete

    删除表中的行

    delete from Student where name='李四'

    9.创建数据库

    create database Student

    10.创建数据库中的表

    create table table_name

    (

    id int,

    name varchar(255),

    age int

    )

    11.约束

    创建表的时候还应该对表添加一些约束,例如:主键,是否为空之类的

    create table Student

    (

    id int not null auto-creament,

    name varchar(255) not null,

    age int ,

    primary key(id)

    )

    12.删除数据库或表

    droptable Student

    drop database Student

    清空表中的数据

    truncate table Student

    没有删除表,只是清空了数据而已

    Alter table Student

    add birth date

    Alter 是用来改变表或数据库的关键字

     

    进阶阶段

    1a href="">.top

    top用来规定返回的记录的数目

    select top 1 * from Student 返回Student表的第一条数据

    select top 50 percent * from Student 返回Student表50%的数据

    href="">2.like

    like用来指定模式匹配

    select * from Student where name like '张%' 返回Student表里名字以张开头的数据

    这里介绍一下通配符

    % 代表一个或者多个字符

    _ 代表一个字符

    [abc] abc中任一字符(这里类似java的regex)

    [^abc] 或者 [!abc] 不在abc中的任意字符(1个)

    href="">

    允许在where里规定多个值

    select * from Student where name in ('张三','李四')

    4.between...and

    操作符选取了一个范围

    select * from Student where age between 15 and 30 选取15到30之前包含15的(mysql)

    不同数据库对这个包含的含义不同

    5.Alias

    用于表的别名

    select name as n , age as a from Student

    6.join...on

    连接2个或者多个表

    连接两个表需要注意,其中一个表中必须有另外一个表的主键,根据这个主键来连接。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

    FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P

    ORDER BY Persons.LastName

    inner join = join 选取两张表中共同的部分

    left join 选择左边表中所有部分

    right join 选择右边表中所有部分

    full join 选择两张表中所有部分

    7.Union

    合并两张表

    前提:两张表有相同数量的列,列的数据类型也必须相似

    href="">8.select into

    从一个表里选择数据插入到另外一个表里

    select * into Student_backup from Student

    升华阶段

    1.索引

    在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

    可以在表中创建索引,以便更加快速高效地查询数据。

    用户无法看到索引,它们只能被用来加速搜索/查询。

    注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

    CREATE INDEX PersonIndex ON Person (LastName DESC)

    2.视图

    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

    视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

    注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

    可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。通过向视图添加函数、join 等等,我们可以向用户精确地提交我们希望提交的数据。

    CREATE VIEW [Current Product List] AS

    SELECT ProductID,ProductName

    FROM Products

    WHERE Discontinued=No

    SELECT * FROM [Products Above Average Price]

    3.函数

    SELECT AVG(column_name) FROM table_name 返回该列的平均数

    SELECT COUNT(column_name) FROM table_name 返回指定列的数目

    SELECT FIRST(column_name) FROM table_name 返回指定的字段中第一个记录的值

    SELECT LAST(column_name) FROM table_name 返回指定的字段中最后一个记录的值

    SELECT MAX(column_name) FROM table_name 返回一列中的最大值。NULL 值不包括在计算中

    SELECT MIN(column_name) FROM table_name 返回一列中的最小值。NULL 值不包括在计算中

    SELECT SUM(column_name) FROM table_name 返回数值列的总数(总额)

    4.group by

    GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组

    SELECT Customer,SUM(OrderPrice)

    FROM Orders
    GROUP BY Customer

    select 语句中含有合计函数,必须进行分组。

    5.having

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    SELECT Customer,SUM(OrderPrice) FROM Orders
    WHERE Customer='Bush' OR Customer='Adams'
    GROUP BY Customer
    HAVING SUM(OrderPrice)>1500

    以上皆借鉴

    原文链接:https://zhuanlan.zhihu.com/p/35917494

  • 相关阅读:
    Delphi 中流的使用
    关于 Delphi 中流的使用(9) 分割与合并文件的函数
    基于Windows字库的点阵数据提取方法
    Oracle 后台进程介绍
    面试-MySQL
    怎样预置桌面上的应用程序图标、快捷方式图标或者窗体小部件?
    配置 Phpstorm + Xdebug + xampp
    [jQuery] 选择器和事件
    数据挖掘算法学习(四)PCA算法
    基础数位DP小结
  • 原文地址:https://www.cnblogs.com/guantou1992/p/12817122.html
Copyright © 2011-2022 走看看