SQL从零到迅速精通实用函数

Posted osmondwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL从零到迅速精通实用函数相关的知识,希望对你有一定的参考价值。

 

  语法是一个编程语言的基础,真的想玩的6得飞起还是要靠自己定义的函数和变量。

1.使用DECLARE语句创建int数据类型的名为@mycounter的局部变量,输入语句如下:

DECLARE @mycounter int;

 

2.创建3个名为@Name、@Phone和@Address的局部变量,并将每个变量都初始化为NULL,输入语句如下。

DECLARE @Name varchar(30),@Phone varchar(20),@Address char(2);

 

附加:

区别: 
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR2 (10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
何时该用CHAR,何时该用varchar2?
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

3.使用SELECT语句为@MyCount变量赋值,最后输出@MyCount变量的值,输出语句如下。
DECLARE @MyCount INT

SELECT @MyCount = 100
SELECT @MyCount
GO

4.*通过查询语句给变量赋值,输入语句如下。
DECLARE @rows int
SET @rows=(SELECT COUNT(*) FROM Member)
SELECT @rows
GO

5.在SELECT查询语句中,使用由SET赋值的局部变量,输入语句如下。
USE test
GO
DECLARE @memberType varchar(100)

6.在SELECT查询语句中,使用由SET赋值的局部变量,输入语句如下。
USE test
GO
DECLARE @memberType varchar(100)
SET @memberType = ‘VIP’
SELECT RTRIM(FirstName)+ \' \'+RTRIM(LastName) AS Name,@memberType
FROM member
GO

附:RTRIM的用法。

 

7.单行注释和多行注释

(1)单行注释以两个连字符“--”开始,作用范围是从注释符号开始到一行的结束;

(2)多行注释作用于某一代码块,使用(/*需要注释的内容*/)。

 

8.创建名称为test_db数据库,输入语句如下。

CREATE DATABASE test_db ON PRIMARY

(

NAME = test_db_data1,--数据库逻辑文件名称

FILENAME = \'C:\\SQL Server 2012\\test_db_data.mdf\',--主数据文件存储位置

SIZE = 5120KB,--主数据文件大小

MAXSIZE = 20, --主数据文件最大增长空间为20MB

FILEGROWTH =1 --文件增长大小设置为1MB

 

************23333很开心,突然发现按shift可以把搜狗输出法调成英文输入状态,不用来回切换输入法来得到英文符号了************

9.在test_db数据库中创建员工表tb_emp1。

USE test_db

CREATE TABLE tb_emp1

(

id            INT PRIMARY KEY,

name      VARCHAR(25) NOT NULL,

deptId     CHAR(2) NOT NULL,

salary     SMALLMONEY NULL

);

 

10.删除test_db数据库中的table_emp表,输入语句如下。

USE test_db

GO 

DROP TABLE dbo.table_emp  --dbo在SQL中是数据管理员的意思

 

11.删除test_db数据库,输入语法如下。

DROP DATABASE test_db

 

12.将test_db数据库的名称修改为company,输入语句如下。

ALTER DATABASE test_db

MODIFY NAME=company

 

13.在更改过名称的company数据库中,向tb_emp1数据表中添加名称为birth的字段列,数据类型为date,要求非空,输入语句如下。

USE company

GO  /*

如果只是执行一条语句,有没有GO都一样
如果多条语句之间用GO分隔开就不一样了
每个被GO分隔的语句都是一个单独的事务,一个语句执行失败不会影响其它语句执行。*/

ALTER TABLE tb_emp1   --选择数据库使用USE,选择表用ALTER;不仅仅是简单的选中数据库,如果想对数据库进行操作那么就要使用SELECT 

ADD birth DATE NOT NULL

 

14.删除tb_emp1表中的birth字段列,输入语句如下:

USE company

GO 

ALTER TABLE tb_emp1

DROP COLUMN birth

 

15.下面演示数据的插入——INSERT

(1)创建表

CREATE TABLE teacher

(

id              INT NOT NULL PRIMARY KEY,

name       VARCHAR(20) NOT NULL

birthday    DATE,

sex           VARCHAR(4),

cellphone  VARCHAR(18)

);

(2)向teacher表中插入多条新记录,T-SQL代码如下。

SELECT * FROM teacher

INSERT INTO teacher

VALUES (2,\'李四\',\'1978-11-21\',\'女\',\'0018624\'),

(3,\'王五\',\'1976-12-05\',\'男\',\'0018678\');

SELECT * FROM teacher

 

16.【数据更改】(UPDATE-SET)在teacher表中,更新id值为2的记录,将birthday字段值改成\'1980-8-8\',将cellphone字段值改为\'0018600\',输入语句如下。

SELECT * FROM teacher WHERE id =2;

UPDATE teacher

SET birthday = \'1980-8-8\',cellphone=\'0018600\' WHERE id = 2;

 

17.【修改表中所有记录】在teacher表中,将所有老师的电话都修改为\'01008611\',输入语句如下。

UPDATE teacher

SET cellphone = \'01008611\';

 

18.【查询表中指定字段】查询stu_info数据表中学生的姓名和成绩,输入语句如下。

SELECT s_name,s_score FROM stu_info;

 

19.【在查询结果中使用表达式】不修改数据表,查询并显示所有学生的成绩降低5分后的结果,输入语句如下。

SELECT s_name,s_score,s_score-5 AS new_score FROM stu_info;

****感受:SQL是一种非常人性化的语言,几乎你对表的所有操作都可以使用SQL的复合语句操作出来。

 

20.【显示部分查询结果】

(1)查询stu_info中所有的记录,但只显示前3条,输入语句如下。

SELECT TOP 3 * FROM stu_info;

(2)带限定条件的查询(所有带限定条件的问题都可以采用WHERE或者WHERE NOT)查询stu_info表中所有性别为\'男\'的学生的信息,输入语句如下。

SELECT * FROM stu_info WHERE s_sex=\'男\';

(3)查询stu_info表中所有性别不为\'男\'的学生的信息,输入如下。

SELECT * FROM stu_info WHERE NOT s_sex=\'男\';

(4)再稍微复杂一些可以使用AND、OR、LIKE、BETWEEN AND配合WHERE进行查询操作

  ①查询stu_info表中性别为\'男’并且成绩大于80的学生信息,输入语句如下。

SELECT * FROM stu_info WHERE s_sex=\'男\' AND s_score > 80;

  ②查询stu_info表中成绩大于80,或者年龄大于18的学生信息,输入语句如下。

SELECT * FROM stu_info WHERE s_score>80 OR s_age>18;

  ③****使用LIKE运算符进行匹配查询***(这部分很重要,我copy了别人的解说如下FROM:http://www.w3school.com.cn/sql/sql_like.asp)

---------LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式---------

LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

SQL LIKE 操作符语法

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

原始的表 (用在例子中的):

Persons 表:

IdLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

 

 

LIKE 操作符实例

例子 1

现在,我们希望从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons
WHERE City LIKE \'N%\'

提示:"%" 可用于定义通配符(模式中缺少的字母)。

结果集:

IdLastNameFirstNameAddressCity
2 Bush George Fifth Avenue New York

 

 

例子 2

接下来,我们希望从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons
WHERE City LIKE \'%g\'

结果集:

IdLastNameFirstNameAddressCity
3 Carter Thomas Changan Street Beijing

 

 

例子 3

接下来,我们希望从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons
WHERE City LIKE \'%lon%\'

结果集:

IdLastNameFirstNameAddressCity
1 Adams John Oxford Street London

 

 

例子 4

通过使用 NOT 关键字,我们可以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons
WHERE City NOT LIKE \'%lon%\'

结果集:

IdLastNameFirstNameAddressCity
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

 

 

 

  ④BETWEEN AND

查询stu_info表中成绩大于50小于90的学生信息,输入语句如下。

SELECT * FROM stu_info WHERE s_score BETWEEN 50 AND 90

以上是关于SQL从零到迅速精通实用函数的主要内容,如果未能解决你的问题,请参考以下文章

SQL从零到迅速精通基本语句

SQL从零到迅速精通数据更新

SQL从零到迅速精通查询利器

SQL从零到迅速精通规则和约束

SQL从零到迅速精通表连接查询

SQL从零到迅速精通触发器