SQL语言与SQL在线实验工具的使用【修订版】

SQL语言与SQL在线实验工具的使用【修订版】

首先简要介绍SQL,然后介绍SQL在线实验工具的使用。

SQL语言介绍

首先提醒两点:

☆标准SQL由ANSI标准委员会管理,从而称为ANSI SQL——因此SQL通常都有相当一致的实现,非常基本的语句往往是相通的,所有主要的DBMS,都支持ANSI SQL,但你不能想当然地认为它总是这样,因为几乎所有的实现有自己的扩展,这种扩展的目的是提供执行特定操作的额外功能或简化方法,很少有两个厂商同时支持这种扩展,例如,对数据库定义、访问权限和安全方面,不同的数据库不同。

☆SQL语句不区分大小写,因此SELECT与select、Select是相同的。许多SQL开发人员喜欢对SQL关键字使用大写,而对列名和表名使用小写,这样做代码更易于阅读和调试。不过,一定要明确虽然SQL关键字是不区分大小写的,但是表名、列名和值可能有所不同(这有赖于具体的DBMS及其如何配置)。

SQL (Structured Query Language 结构化查询语言)是基于关系代数和元组关系演算,用于对数据库的数据定义和数据操纵的语言。

数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。数据库是通过DBMS创建和操纵的容器——保存有组织的数据——通常是一个文件或一组文件。

数据库管理系统(Database Management System:DBMS)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。广泛的数据库管理系统是关系型DBMS(relational DBMS),在关系型数据模型中,用二维表格表示数据库中的数据。这些表格称为关系。

数据表:数据表是关系数据库的基本存储结构,二维数据表有行(Row)——也叫作记录、列(Column)——也叫作字段。

数据类型
允许什么类型的数据。每个表的列(column)都有相应的数据类型,它限制(或允许)该列中存储的数据。
数据类型限定了可存储在列中的数据种类(例如,防止在数值字段中录入字符值),并在优化磁盘使用方面起重要的作用。因此,在创建表(table)时必须特别关注所用的数据类型。

注意:数据类型兼容问题
数据类型及其名称是SQL不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的支持,但也有些数据类型不尽相同,甚至有相同的数据类型在不同的DBMS中具有不同的名称。MySQL数据库数据类型概述 MySQL数据库数据类型概述_软件技术爱好者的博客-CSDN博客 Oracle数据库常用数据类型概述 Oracle数据库数据类型概述_oracle 数据类型官网-CSDN博客 SQL Server数据库数据类型概述 SQL Server数据库数据类型概述_sql serserver 列类型_软件技术爱好者的博客-CSDN博客

SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据。

先简要介绍SQL语言,SQL是用于访问和处理数据库的标准的计算机语言,这些数据库系统包括 MS SQL Server、Oracle、MySQL  等。
通过 SQL 创建数据库、表、索引,及其删除它们。
通过SQL 可以在数据库中执行查询、获取数据、插入新的记录、删除记录以及更新记录。

SQL 语言通常按照功能划分成以下的 4 个部分:
  DDL (Data Definition Language):数据定义语言,用来定义数据库对象,包括库、表、视图和索引等。
  DML (Data Manipulation Language):数据操作语言,用来操作和业务相关的记录。
  DQL (Data Query Language):数据查询语言,用来查询经过条件筛选的记录。
  DCL (Data Control Language):数据控制语言,用来定义访问权限和安全级别。

常见的相关语句可见下表:

语句

语法

AND / OR

SELECT column_name(s)
FROM table_name
WHERE condition
AND|OR condition

ALTER TABLE (add column)

ALTER TABLE table_name
ADD column_name datatype

ALTER TABLE (drop column)

ALTER TABLE table_name
DROP COLUMN column_name

AS (alias for column)

SELECT column_name AS column_alias
FROM table_name

AS (alias for table)

SELECT column_name
FROM table_name  AS table_alias

BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

CREATE DATABASE

CREATE DATABASE database_name

CREATE INDEX

CREATE INDEX index_name
ON table_name (column_name)

CREATE TABLE

CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)

CREATE UNIQUE INDEX

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE VIEW

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

DELETE FROM

DELETE FROM table_name
(Note: Deletes the entire table!!)

or

DELETE FROM table_name
WHERE condition

DROP DATABASE

DROP DATABASE database_name

DROP INDEX

DROP INDEX table_name.index_name

DROP TABLE

DROP TABLE table_name

GROUP BY

SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1

HAVING

SELECT column_name1,SUM(column_name2)
FROM table_name
GROUP BY column_name1
HAVING SUM(column_name2) condition value

IN

SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)

INSERT INTO

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

or

INSERT INTO table_name
(column_name1, column_name2,...)
VALUES (value1, value2,....)

LIKE

SELECT column_name(s)
FROM table_name
WHERE column_name
LIKE pattern

ORDER BY

SELECT column_name(s)
FROM table_name
ORDER BY column_name [ASC|DESC]

SELECT

SELECT column_name(s)
FROM table_name

SELECT *

SELECT *
FROM table_name

SELECT DISTINCT

SELECT DISTINCT column_name(s)
FROM table_name

SELECT INTO
(used to create backup copies of tables)

SELECT *
INTO new_table_name
FROM original_table_name

or

SELECT column_name(s)
INTO new_table_name
FROM original_table_name

TRUNCATE TABLE
(deletes only the data inside the table)

TRUNCATE TABLE table_name

UPDATE

UPDATE table_name
SET column_name=new_value
[, column_name=new_value]
WHERE column_name=some_value

WHERE

SELECT column_name(s)
FROM table_name
WHERE condition

SQL语句以分号结尾。SQL关键字是不区分大小写(SELECT,FROM,WHERE等)。但是,在某些设置中,表名和字段(列)名区分大小写。

不同的数据库对字段(列)名等标识符、字符串大小写处理情况有点麻烦,如:

默认情况下,Oracle标识符(表名,列名等)不区分大小写。 您可以使用引号将它们区分大小写(例如:dba_tables)。 SQL关键字('STRING'NLS_COMPNLS_SORT等)始终不区分大小写。在标识符周围使用引号,将区分带小写。

WHERE 子句条件运算符简介
WHERE子句可包括各种条件运算符:
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
范围运算符(表达式值是否在指定的范围):BETWEEN…AND…
NOT BETWEEN…AND…
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……)
NOT IN (项1,项2……)
模式匹配符(判断值是否与指定的字符通配格式相符)LIKE、NOT LIKE
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR
1)、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
2)、列表运算符例:country IN ('Germany','China')
3)、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、
varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:

在 SQL 中,可使用以下通配符:

通配符

描述

%

替代零个或多个字符

_

仅替代一个字符

[charlist]

字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符



SELECT * FROM Persons
WHERE PersonID=2;

☆删除表
语法:
drop table 表名称;

drop table Persons;

注意 、对数据库定义、访问权限和安全方面,不同的数据库不同,举例如下:

☆对MySQL和SQL Server创建数据库,若数据库名为mybase;
CREATE DATABASE mybase;

mysql和sqlserver用起来比较类似简便,通过 “create database 数据库名” 就可以创建数据库了,Oracle虽然也有create database语句,但相当不同,需要一些比较繁琐的前期工作(编写初始化参数文件、创建实例等),使用起来比较繁琐。

☆对 MySQL查看所有数据库
SHOW DATABASES;

对SQL Server 查看所有数据库使用
SELECT name, database_id, create_date  
FROM sys.databases ; 

☆对MySQL和SQL Server删除数据库,若数据库名为mybase;
DROP DATABASE mybase1;

☆对MySQL和SQL Server切换数据库,若数据库名为mybase
USE mybase;

SQL在线实验工具

想练习SQL又不想安装数据库环境,可以使用使用SQL在线实验工具,原来介绍的几个,今日测试发现有的不能用了,故进行了修订。

★  廖雪峰的在线SQL

https://www.liaoxuefeng.com/wiki/1177760294764384/1179611432985088 此乃廖雪峰的在线SQL网址,参见下图:

廖雪峰的在线SQL比较易用,你可以试试不多言了。

练习语句

☆创建表dept
CREATE TABLE dept(
    deptno INT PRIMARY KEY,
    dname VARCHAR(20),
    loc VARCHAR(20)
);

☆添加数据
INSERT INTO  VALUES
(10,'餐饮部','上海'),
(20,'销售部','浙江'),
(30,'财务部','北京'),
(40,'技术部','深圳');

☆查询数据
SELECT * FROM dept

☆创建表emp
CREATE TABLE emp(
        empno INT PRIMARY KEY AUTO_INCREMENT,--主键约束
        ename VARCHAR(20),
        job VARCHAR(20),
        mgr int,
        hiredate DATE,
        sal DOUBLE(7,2),
        comm double(5,2),
        deptno INT NOT NULL,    -- 非空约束
        CONSTRAINT fk_emp_dept FOREIGN KEY(deptno) REFERENCES dept(deptno) --加外键
);

【如果上面的语句中,未使用CONSTRAINT子句,之后可以用下句为从表emp加外键
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept  FOREIGN KEY(deptno) REFERENCES dept(deptno);】

☆添加数据
INSERT INTO emp VALUES
(2004,'张伟','clerk',2002,'1994-10-12',8000.00,500.00,20),
(2005,'曾小贤','clerk',2002,'1993-05-10',9000.00,700.00,20),
(3001,'刘梅','leader',null,'1968-08-08',9000.00,NULL,30),
(3002,'夏冬梅','manger',3001,'1968-09-21',10000.00,600.00,30),
(3003,'夏雪','clerk',3002,'1989-09-21',8000.00,300.00,30)

☆删除表,表名emp
drop table emp;

☆查询数据
SELECT * FROM emp

☆查询显示指定字段: SELECT 字段,字段,字段... FROM 表名;
SELECT ename,hiredate,sal FROM emp;

☆使用DISTINCT可以过滤重复字段行: 
SELECT DISTINCT sal FROM emp;

☆查询指定条件
SELECT * FROM emp  WHERE sal =8000;

☆使用表达式+、-、*、/
SELECT ename, sal+comm FROM emp;  

☆模糊查询
SELECT * FROM emp WHERE ename LIKE '夏%';

☆使用and,or
SELECT * FROM emp  WHERE sal >= 9000 AND sal <=10000;

☆使用in,not in
SELECT * FROM  emp where job IN('leader','manger');

☆使用between...and []
SELECT * FROM  emp WHERE sal BETWEEN 9000 AND 10000;

☆使用聚合函数SUM()、COUNT()、MAX()、MIN()、AVG()
SELECT MAX(sal) FROM emp; 

☆等值链接(SELECT * FROM A,B WHERE A.主键=B.外键;) 如:
SELECT * 
FROM emp,dept WHERE dept.deptno = emp.deptno;

☆内连接(SELECT * FROM A INNER JOIN B ON A.主键=B.外键;) 如:
SELECT * 
FROM emp INNER JOIN dept ON dept.deptno = emp.deptno;

☆外连接:
1左外连接:(SELECT * FROM A LEFT OUTER JOIN B ON 条件;) 如:
SELECT * 
FROM emp LEFT OUTER JOIN dept ON dept.deptno=emp.deptno;
2右外连接:(SELECT * FROM A right OUTER JOIN B ON 条件;) 如:
SELECT * 
FROM emp RIGHT OUTER JOIN dept ON dept.deptno=emp.deptno;

☆子查询:
SELECT * 
FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE loc ='北京');

★SQL Fiddle

SQL Fiddle 支持 MySQL、Oracle、PostgreSQL、SQLite、MS SQL Server等主流数据库,不需要注册即可使用。

具体使用可参见“在线 SQL 模拟器SQL Fiddle使用简介” https://blog.csdn.net/cnds123/article/details/134666895 一文

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值